py api additions needed for fixing [#34864].

- add rna property 'as_bytes' method so you can get a string property as python bytes (bypass encoding).
- make bpy.path.abspath/relpath compatible with bytes.
- add 'relpath' option to bpy_extras.image_utils.load_image(), so you can load an image relative to a path.
This commit is contained in:
2013-04-05 00:30:32 +00:00
parent dee2f0c9ac
commit 98752a1f30
3 changed files with 74 additions and 11 deletions

View File

@@ -48,6 +48,10 @@ from _bpy_path import (extensions_audio,
)
def _getattr_bytes(var, attr):
return var.path_resolve(attr, False).as_bytes()
def abspath(path, start=None, library=None):
"""
Returns the absolute path relative to the current blend file
@@ -60,13 +64,22 @@ def abspath(path, start=None, library=None):
convenience, when the library is not None its path replaces *start*.
:type library: :class:`bpy.types.Library`
"""
if path.startswith("//"):
if library:
start = _os.path.dirname(abspath(library.filepath))
return _os.path.join(_os.path.dirname(_bpy.data.filepath)
if start is None else start,
path[2:],
)
if isinstance(path, bytes):
if path.startswith(b"//"):
if library:
start = _os.path.dirname(abspath(_getattr_bytes(library, "filepath")))
return _os.path.join(_os.path.dirname(_getattr_bytes(_bpy.data, "filepath"))
if start is None else start,
path[2:],
)
else:
if path.startswith("//"):
if library:
start = _os.path.dirname(abspath(library.filepath))
return _os.path.join(_os.path.dirname(_bpy.data.filepath)
if start is None else start,
path[2:],
)
return path
@@ -79,10 +92,16 @@ def relpath(path, start=None):
when not set the current filename is used.
:type start: string
"""
if not path.startswith("//"):
if start is None:
start = _os.path.dirname(_bpy.data.filepath)
return "//" + _os.path.relpath(path, start)
if isinstance(path, bytes):
if not path.startswith(b"//"):
if start is None:
start = _os.path.dirname(_getattr_bytes(_bpy.data, "filepath"))
return b"//" + _os.path.relpath(path, start)
else:
if not path.startswith("//"):
if start is None:
start = _os.path.dirname(_bpy.data.filepath)
return "//" + _os.path.relpath(path, start)
return path