Support slash notation for BlendPath
This mimicks the slash notation of pathlib.Path
This commit is contained in:
parent
15cd74cda4
commit
6b9c0a3f95
@ -25,6 +25,19 @@ class BlendPath(bytes):
|
|||||||
"""
|
"""
|
||||||
return self.decode('utf8', errors='replace')
|
return self.decode('utf8', errors='replace')
|
||||||
|
|
||||||
|
def __truediv__(self, subpath: bytes):
|
||||||
|
"""Slash notation like pathlib.Path."""
|
||||||
|
sub = BlendPath(subpath)
|
||||||
|
if sub.is_absolute():
|
||||||
|
raise ValueError("'a / b' only works when 'b' is a relative path")
|
||||||
|
return BlendPath(os.path.join(self, sub))
|
||||||
|
|
||||||
|
def __rtruediv__(self, parentpath: bytes):
|
||||||
|
"""Slash notation like pathlib.Path."""
|
||||||
|
if self.is_absolute():
|
||||||
|
raise ValueError("'a / b' only works when 'b' is a relative path")
|
||||||
|
return BlendPath(os.path.join(parentpath, self))
|
||||||
|
|
||||||
def is_blendfile_relative(self) -> bool:
|
def is_blendfile_relative(self) -> bool:
|
||||||
return self[:2] == b'//'
|
return self[:2] == b'//'
|
||||||
|
|
||||||
|
|||||||
@ -42,3 +42,12 @@ class BlendPathTest(unittest.TestCase):
|
|||||||
BlendPath(b'../some/file.blend').absolute(b'/root/to'))
|
BlendPath(b'../some/file.blend').absolute(b'/root/to'))
|
||||||
self.assertEqual(b'/shared/some/file.blend',
|
self.assertEqual(b'/shared/some/file.blend',
|
||||||
BlendPath(b'/shared/some/file.blend').absolute(b'/root/to'))
|
BlendPath(b'/shared/some/file.blend').absolute(b'/root/to'))
|
||||||
|
|
||||||
|
def test_slash(self):
|
||||||
|
self.assertEqual(b'/root/and/parent.blend', BlendPath(b'/root/and') / b'parent.blend')
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
BlendPath(b'/root/and') / b'/parent.blend'
|
||||||
|
|
||||||
|
self.assertEqual(b'/root/and/parent.blend', b'/root/and' / BlendPath(b'parent.blend'))
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
b'/root/and' / BlendPath(b'/parent.blend')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user