Support slash notation for BlendPath

This mimicks the slash notation of pathlib.Path
This commit is contained in:
Sybren A. Stüvel 2018-02-27 15:32:28 +01:00
parent 15cd74cda4
commit 6b9c0a3f95
2 changed files with 22 additions and 0 deletions

View File

@ -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'//'

View File

@ -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')