[Bf-blender-cvs] [8d3efb2b90e] master: Fix T53772: Presets don't support colons

Campbell Barton noreply at git.blender.org
Sun Jan 14 04:36:46 CET 2018


Commit: 8d3efb2b90e5f712f7f8a18221acf333133a2dd4
Author: Campbell Barton
Date:   Sun Jan 14 14:31:39 2018 +1100
Branches: master
https://developer.blender.org/rB8d3efb2b90e5f712f7f8a18221acf333133a2dd4

Fix T53772: Presets don't support colons

===================================================================

M	release/scripts/modules/bpy/path.py
M	release/scripts/startup/bl_operators/presets.py

===================================================================

diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py
index e17d710068c..0bfb14e4e0d 100644
--- a/release/scripts/modules/bpy/path.py
+++ b/release/scripts/modules/bpy/path.py
@@ -28,6 +28,7 @@ __all__ = (
     "basename",
     "clean_name",
     "display_name",
+    "display_name_to_filepath",
     "display_name_from_filepath",
     "ensure_ext",
     "extensions_image",
@@ -193,6 +194,12 @@ def _clean_utf8(name):
         return name.encode("utf8", "replace").decode("utf8")
 
 
+_display_name_literals = {
+    ":": "_colon_",
+    "+": "_plus_",
+}
+
+
 def display_name(name):
     """
     Creates a display string from name to be used menus and the user interface.
@@ -201,8 +208,8 @@ def display_name(name):
     filenames and module names.
     """
     # string replacements
-    name = name.replace("_colon_", ":")
-    name = name.replace("_plus_", "+")
+    for disp_value, file_value in _display_name_literals.items():
+        name = name.replace(file_value, disp_value)
 
     # strip to allow underscore prefix
     # (when paths can't start with numbers for eg).
@@ -214,6 +221,15 @@ def display_name(name):
     name = _clean_utf8(name)
     return name
 
+def display_name_to_filepath(name):
+    """
+    Performs the reverse of display_name using literal versions of characters
+    which aren't supported in a filepath.
+    """
+    for disp_value, file_value in _display_name_literals.items():
+        name = name.replace(disp_value, file_value)
+    return name
+
 
 def display_name_from_filepath(name):
     """
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index fdacf24f6e0..c696c38dac6 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -65,8 +65,10 @@ class AddPresetBase:
                 setattr(cls, attr, trans)
             return trans
 
+        name = name.lower().strip()
+        name = bpy.path.display_name_to_filepath(name)
         trans = maketrans_init()
-        return name.lower().strip().translate(trans)
+        return name.translate(trans)
 
     def execute(self, context):
         import os
@@ -702,4 +704,4 @@ classes = (
     AddPresetUnitsLength,
     ExecutePreset,
     WM_MT_operator_presets,
-)
\ No newline at end of file
+)



More information about the Bf-blender-cvs mailing list