diff options
-rw-r--r-- | release/scripts/modules/bpy/path.py | 30 | ||||
-rw-r--r-- | release/scripts/startup/bl_operators/presets.py | 16 | ||||
-rw-r--r-- | source/blender/bmesh/bmesh.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_script/script_edit.c | 2 | ||||
-rw-r--r-- | source/blender/python/generic/py_capi_utils.c | 6 | ||||
-rw-r--r-- | source/blender/python/intern/bpy.c | 11 |
6 files changed, 39 insertions, 27 deletions
diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py index 9a90797bf28..7b54af944ad 100644 --- a/release/scripts/modules/bpy/path.py +++ b/release/scripts/modules/bpy/path.py @@ -118,6 +118,14 @@ def clean_name(name, replace="_"): return name +def _clean_utf8(name): + name = _os.path.splitext(basename(name))[0] + if type(name) == bytes: + return name.decode("utf8", "replace") + else: + return name.encode("utf8", "replace").decode("utf8") + + def display_name(name): """ Creates a display string from name to be used menus and the user interface. @@ -126,17 +134,18 @@ def display_name(name): filenames and module names. """ - name_base = _os.path.splitext(name)[0] + name = _os.path.splitext(name)[0] # string replacements - name_base = name_base.replace("_colon_", ":") + name = name.replace("_colon_", ":") - name_base = name_base.replace("_", " ") + name = name.replace("_", " ") - if name_base.islower(): - return name_base.lower().title() - else: - return name_base + if name.islower(): + name = name.lower().title() + + name = _clean_utf8(name) + return name def display_name_from_filepath(name): @@ -144,11 +153,10 @@ def display_name_from_filepath(name): Returns the path stripped of directory and extension, ensured to be utf8 compatible. """ + name = _os.path.splitext(basename(name))[0] - if type(name) == bytes: - return name.decode("utf8", "replace") - else: - return name.encode("utf8", "replace").decode("utf8") + name = _clean_utf8(name) + return name def resolve_ncase(path): diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index 1a17cd9f000..abd940e06f9 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -20,7 +20,7 @@ import bpy from bpy.types import Menu, Operator - +from bpy.props import StringProperty, BoolProperty class AddPresetBase(): '''Base preset class, only for subclassing @@ -31,13 +31,13 @@ class AddPresetBase(): # bl_label = "Add a Python Preset" bl_options = {'REGISTER'} # only because invoke_props_popup requires. - name = bpy.props.StringProperty( + name = StringProperty( name="Name", description="Name of the preset, used to make the path name", maxlen=64, options={'SKIP_SAVE'}, ) - remove_active = bpy.props.BoolProperty( + remove_active = BoolProperty( default=False, options={'HIDDEN', 'SKIP_SAVE'}, ) @@ -166,12 +166,10 @@ class ExecutePreset(Operator): bl_idname = "script.execute_preset" bl_label = "Execute a Python Preset" - filepath = bpy.props.StringProperty( - name="Path", - description="Path of the Python file to execute", - maxlen=512, + filepath = StringProperty( + subtype='FILE_PATH', ) - menu_idname = bpy.props.StringProperty( + menu_idname = StringProperty( name="Menu ID Name", description="ID name of the menu this was called from", ) @@ -456,7 +454,7 @@ class AddPresetOperator(AddPresetBase, Operator): bl_label = "Operator Preset" preset_menu = "WM_MT_operator_presets" - operator = bpy.props.StringProperty( + operator = StringProperty( name="Operator", maxlen=64, options={'HIDDEN'}, diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index 59b96cafca0..2e568a15117 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -222,7 +222,6 @@ extern "C" { #include "intern/bmesh_polygon.h" #include "intern/bmesh_queries.h" #include "intern/bmesh_walkers.h" -#include "intern/bmesh_walkers.h" #include "intern/bmesh_inline.c" #include "intern/bmesh_operator_api_inline.c" diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index 7702e952e24..c752b86c1e8 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -80,7 +80,7 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot) ot->exec= run_pyfile_exec; ot->poll= ED_operator_areaactive; - RNA_def_string_file_path(ot->srna, "filepath", "", 512, "Path", ""); + RNA_def_string_file_path(ot->srna, "filepath", "", FILE_MAX, "Path", ""); } diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c index fdb5f629115..c670f728cb9 100644 --- a/source/blender/python/generic/py_capi_utils.c +++ b/source/blender/python/generic/py_capi_utils.c @@ -437,8 +437,10 @@ PyObject *PyC_DefaultNameSpace(const char *filename) PyDict_SetItemString(interp->modules, "__main__", mod_main); Py_DECREF(mod_main); /* sys.modules owns now */ PyModule_AddStringConstant(mod_main, "__name__", "__main__"); - if (filename) - PyModule_AddStringConstant(mod_main, "__file__", filename); /* __file__ only for nice UI'ness */ + if (filename) { + /* __file__ mainly for nice UI'ness */ + PyModule_AddObject(mod_main, "__file__", PyUnicode_DecodeFSDefault(filename)); + } PyModule_AddObject(mod_main, "__builtins__", interp->builtins); Py_INCREF(interp->builtins); /* AddObject steals a reference */ return PyModule_GetDict(mod_main); diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 0f5ca13586c..71cfa50743d 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -71,12 +71,17 @@ PyDoc_STRVAR(bpy_script_paths_doc, static PyObject *bpy_script_paths(PyObject *UNUSED(self)) { PyObject *ret = PyTuple_New(2); + PyObject *item; char *path; path = BLI_get_folder(BLENDER_SYSTEM_SCRIPTS, NULL); - PyTuple_SET_ITEM(ret, 0, PyUnicode_FromString(path?path:"")); + item = PyUnicode_DecodeFSDefault(path ? path : ""); + BLI_assert(item != NULL); + PyTuple_SET_ITEM(ret, 0, item); path = BLI_get_folder(BLENDER_USER_SCRIPTS, NULL); - PyTuple_SET_ITEM(ret, 1, PyUnicode_FromString(path?path:"")); + item = PyUnicode_DecodeFSDefault(path ? path : ""); + BLI_assert(item != NULL); + PyTuple_SET_ITEM(ret, 1, item); return ret; } @@ -200,7 +205,7 @@ static PyObject *bpy_resource_path(PyObject *UNUSED(self), PyObject *args, PyObj path = BLI_get_folder_version(folder_id, (major * 100) + minor, FALSE); - return PyUnicode_DecodeFSDefault(path); + return PyUnicode_DecodeFSDefault(path ? path : ""); } static PyMethodDef meth_bpy_script_paths = |