Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-02-19 03:26:53 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-02-19 03:32:23 +0400
commit2a9e33fba56c0d99aa224c91860be25783363ad5 (patch)
tree3d6d2f0d9fa10f2fb662d644f159d531a3aa2d2d /release
parent7afbdbf812abd172cc4dd67c16b540a6510a38f1 (diff)
Keymap: load/save improvements
- avoid passing redundant operator name to keymap property set function. - avoid double attr lookups when setting each property. - handle exceptions on value type mismatch. - avoid resource warning on failed load.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/modules/bpy/utils.py6
-rw-r--r--release/scripts/modules/bpy_extras/keyconfig_utils.py15
2 files changed, 12 insertions, 9 deletions
diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py
index 608cd920865..6c32f95fc03 100644
--- a/release/scripts/modules/bpy/utils.py
+++ b/release/scripts/modules/bpy/utils.py
@@ -494,10 +494,10 @@ def keyconfig_set(filepath, report=None):
keyconfigs_old = keyconfigs[:]
try:
- keyfile = open(filepath)
- exec(compile(keyfile.read(), filepath, "exec"), {"__file__": filepath})
- keyfile.close()
error_msg = ""
+ with open(filepath, 'r', encoding='utf-8') as keyfile:
+ exec(compile(keyfile.read(), filepath, "exec"),
+ {"__file__": filepath})
except:
import traceback
error_msg = traceback.format_exc()
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 99f41b0699c..c50b320dceb 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -175,7 +175,7 @@ def _export_properties(prefix, properties, kmi_id, lines=None):
elif properties.is_property_set(pname):
value = string_value(value)
if value != "":
- lines.append("set_kmi_prop(%s, '%s', %s, '%s')\n" % (prefix, pname, value, kmi_id))
+ lines.append("kmi_props_setattr(%s, '%s', %s)\n" % (prefix, pname, value))
return lines
@@ -221,11 +221,14 @@ def keyconfig_export(wm, kc, filepath):
f.write("import bpy\n")
f.write("import os\n\n")
- f.write("def set_kmi_prop(kmiprops, prop, value, kmiid):\n"
- " if hasattr(kmiprops, prop):\n"
- " setattr(kmiprops, prop, value)\n"
- " else:\n"
- " print(\"Warning: property '%s' not found in keymap item '%s'\" % (prop, kmiid))\n\n")
+ f.write("def kmi_props_setattr(kmi_props, attr, value):\n"
+ " try:\n"
+ " setattr(kmi_props, attr, value)\n"
+ " except AttributeError:\n"
+ " print(\"Warning: property '%s' not found in keymap item '%s'\" %\n"
+ " (attr, kmi_props.__class__.__name__))\n"
+ " except Exception as e:\n"
+ " print(\"Warning: %r\" % e)\n\n")
f.write("wm = bpy.context.window_manager\n")
f.write("kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0])\n\n") # keymap must be created by caller