Fix T47986: OBJ Import fails w/ imagepath encoding
authorCampbell Barton <ideasman42@gmail.com>
Tue, 29 Mar 2016 07:22:35 +0000 (18:22 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 29 Mar 2016 07:30:08 +0000 (18:30 +1100)
release/scripts/modules/bpy/path.py
release/scripts/modules/bpy_extras/image_utils.py

index 99c46e4b03449c47b311530215d6fe7d195eab87..30f6c8eebeda425c8a36e3ec2bb8942f62b1f753 100644 (file)
@@ -35,6 +35,7 @@ __all__ = (
     "extensions_audio",
     "is_subdir",
     "module_names",
+    "native_pathsep",
     "reduce_dirs",
     "relpath",
     "resolve_ncase",
@@ -349,6 +350,28 @@ def basename(path):
     return _os.path.basename(path[2:] if path[:2] in {"//", b"//"} else path)
 
 
+def native_pathsep(path):
+    """
+    Replace the path separator with the systems native ``os.sep``.
+    """
+    if type(path) is str:
+        if _os.sep == "/":
+            return path.replace("\\", "/")
+        else:
+            if path.startswith("//"):
+                return "//" + path[2:].replace("/", "\\")
+            else:
+                return path.replace("/", "\\")
+    else:  # bytes
+        if _os.sep == "/":
+            return path.replace(b"\\", b"/")
+        else:
+            if path.startswith(b"//"):
+                return b"//" + path[2:].replace(b"/", b"\\")
+            else:
+                return path.replace(b"/", b"\\")
+
+
 def reduce_dirs(dirs):
     """
     Given a sequence of directories, remove duplicates and
index d078d63a41779feefd45e1df63b9e8f1ab094d63..f772aab2b141f53ec901b826cfbee3659e221e41 100644 (file)
@@ -80,9 +80,12 @@ def load_image(imagepath,
     # Utility Functions
 
     def _image_load_placeholder(path):
-        name = bpy.path.basename(path)
-        if type(name) == bytes:
-            name = name.decode("utf-8", "replace")
+        name = path
+        if type(path) is str:
+            name = name.encode("utf-8", "replace")
+        name = name.decode("utf-8", "replace")
+        name = os.path.basename(name)
+
         image = bpy.data.images.new(name, 128, 128)
         # allow the path to be resolved later
         image.filepath = path
@@ -147,6 +150,8 @@ def load_image(imagepath,
 
     # -------------------------------------------------------------------------
 
+    imagepath = bpy.path.native_pathsep(imagepath)
+
     if verbose:
         print("load_image('%s', '%s', ...)" % (imagepath, dirname))