From 2a9e33fba56c0d99aa224c91860be25783363ad5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 19 Feb 2014 10:26:53 +1100 Subject: 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. --- release/scripts/modules/bpy/utils.py | 6 +++--- release/scripts/modules/bpy_extras/keyconfig_utils.py | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'release') 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 -- cgit v1.2.3