[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45073] trunk/blender: fix [#30623] user-defined render presets bug
Campbell Barton
ideasman42 at gmail.com
Wed Mar 21 23:29:53 CET 2012
Revision: 45073
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45073
Author: campbellbarton
Date: 2012-03-21 22:29:49 +0000 (Wed, 21 Mar 2012)
Log Message:
-----------
fix [#30623] user-defined render presets bug
this report exposed multiple bugs in blender when using a non utf8 compatible home directory.
- bpy.utils.script_paths() would crash when homedir wasn't utf8 (reported bug)
- PyC_DefaultNameSpace() - would raise an error when running when __file__ was non utf8.
- preset filepath property was not set to accept non utf8.
- bpy.paths.display_name would raise an error on non utf8 paths, (used for preset draw)
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy/path.py
trunk/blender/release/scripts/startup/bl_operators/presets.py
trunk/blender/source/blender/bmesh/bmesh.h
trunk/blender/source/blender/editors/space_script/script_edit.c
trunk/blender/source/blender/python/generic/py_capi_utils.c
trunk/blender/source/blender/python/intern/bpy.c
Modified: trunk/blender/release/scripts/modules/bpy/path.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/path.py 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/release/scripts/modules/bpy/path.py 2012-03-21 22:29:49 UTC (rev 45073)
@@ -118,6 +118,14 @@
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,29 +134,29 @@
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):
"""
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):
Modified: trunk/blender/release/scripts/startup/bl_operators/presets.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/presets.py 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/release/scripts/startup/bl_operators/presets.py 2012-03-21 22:29:49 UTC (rev 45073)
@@ -20,8 +20,8 @@
import bpy
from bpy.types import Menu, Operator
+from bpy.props import StringProperty, BoolProperty
-
class AddPresetBase():
'''Base preset class, only for subclassing
subclasses must define
@@ -31,13 +31,13 @@
# 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 @@
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 @@
bl_label = "Operator Preset"
preset_menu = "WM_MT_operator_presets"
- operator = bpy.props.StringProperty(
+ operator = StringProperty(
name="Operator",
maxlen=64,
options={'HIDDEN'},
Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/source/blender/bmesh/bmesh.h 2012-03-21 22:29:49 UTC (rev 45073)
@@ -222,7 +222,6 @@
#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"
Modified: trunk/blender/source/blender/editors/space_script/script_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_edit.c 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/source/blender/editors/space_script/script_edit.c 2012-03-21 22:29:49 UTC (rev 45073)
@@ -80,7 +80,7 @@
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", "");
}
Modified: trunk/blender/source/blender/python/generic/py_capi_utils.c
===================================================================
--- trunk/blender/source/blender/python/generic/py_capi_utils.c 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/source/blender/python/generic/py_capi_utils.c 2012-03-21 22:29:49 UTC (rev 45073)
@@ -437,8 +437,10 @@
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);
Modified: trunk/blender/source/blender/python/intern/bpy.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy.c 2012-03-21 21:40:42 UTC (rev 45072)
+++ trunk/blender/source/blender/python/intern/bpy.c 2012-03-21 22:29:49 UTC (rev 45073)
@@ -71,12 +71,17 @@
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 @@
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 =
More information about the Bf-blender-cvs
mailing list