[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24545] trunk/blender: F8 reload works again, script errors are printed but dont stop loading every other script
Campbell Barton
ideasman42 at gmail.com
Fri Nov 13 12:10:31 CET 2009
Revision: 24545
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24545
Author: campbellbarton
Date: 2009-11-13 12:10:29 +0100 (Fri, 13 Nov 2009)
Log Message:
-----------
F8 reload works again, script errors are printed but dont stop loading every other script
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy/__init__.py
trunk/blender/release/scripts/modules/bpy/ops.py
trunk/blender/release/scripts/op/wm.py
trunk/blender/source/blender/editors/screen/screen_ops.c
trunk/blender/source/blender/editors/space_script/script_edit.c
trunk/blender/source/blender/editors/space_script/script_intern.h
trunk/blender/source/blender/editors/space_script/script_ops.c
trunk/blender/source/blender/python/intern/bpy_operator.c
trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
trunk/blender/source/blender/python/intern/bpy_ui.c
Modified: trunk/blender/release/scripts/modules/bpy/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/__init__.py 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/release/scripts/modules/bpy/__init__.py 2009-11-13 11:10:29 UTC (rev 24545)
@@ -24,27 +24,44 @@
context = _bpy.context
# python modules
-from bpy import utils, ops
+from bpy import utils
+from bpy import ops as ops_module
# fake operator module
-ops = ops.bpy_ops()
+ops = ops_module.ops_fake_module
# load all scripts
import os
import sys
-base_path = os.path.join(os.path.dirname(__file__), "..", "..")
-base_path = os.path.normpath(base_path) # clean
+def load_scripts(reload_scripts=False):
+ import traceback
+
+ def test_import(module_name):
+ try:
+ return __import__(module_name)
+ except:
+ traceback.print_exc()
+ return None
+
+ base_path = os.path.join(os.path.dirname(__file__), "..", "..")
+ base_path = os.path.normpath(base_path) # clean
-# print(base_path, base_path_ui)
+ for path_subdir in ("ui", "op", "io"):
+ path = os.path.join(base_path, path_subdir)
+ sys.path.insert(0, path)
+ for f in sorted(os.listdir(path)):
+ if f.endswith(".py"):
+ # python module
+ mod = test_import(f[0:-3])
+ elif "." not in f:
+ # python package
+ mod = test_import(f)
+ else:
+ mod = None
+
+ if reload_scripts and mod:
+ print("Reloading:", mod)
+ reload(mod)
-for path_subdir in ("ui", "op", "io"):
- path = os.path.join(base_path, path_subdir)
- sys.path.insert(0, path)
- for f in sorted(os.listdir(path)):
- if f.endswith(".py"):
- # python module
- __import__(f[0:-3])
- elif "." not in f:
- # python package
- __import__(f)
+load_scripts()
\ No newline at end of file
Modified: trunk/blender/release/scripts/modules/bpy/ops.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/ops.py 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/release/scripts/modules/bpy/ops.py 2009-11-13 11:10:29 UTC (rev 24545)
@@ -192,6 +192,4 @@
return "<function bpy.ops.%s.%s at 0x%x'>" % \
(self.module, self.func, id(self))
-import bpy
-bpy.ops = bpy_ops()
-
+ops_fake_module = bpy_ops()
Modified: trunk/blender/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/release/scripts/op/wm.py 2009-11-13 11:10:29 UTC (rev 24545)
@@ -362,6 +362,37 @@
return ('RUNNING_MODAL',)
+class WM_OT_reload_scripts(bpy.types.Operator):
+ '''Load online reference docs'''
+ bl_idname = "wm.reload_scripts"
+ bl_label = "Reload Scripts"
+
+ def execute(self, context):
+ MOD = type(bpy)
+ import sys
+ bpy.load_scripts(True)
+ '''
+ prefix = bpy.base_path
+ items = list(sys.modules.items())
+ items.sort()
+ items.reverse()
+ for mod_name, mod in items:
+ mod_file = getattr(mod, "__file__", "")
+ if mod_file.startswith(prefix) and "__init__" not in mod_file:
+ print(mod_file)
+ reload(mod)
+ """
+ for submod_name in dir(mod):
+ submod = getattr(mod, submod_name)
+ if isinstance(submod, MOD):
+ reload(submod)
+ """
+ else:
+ print("Ignoring:", mod, mod_file)
+ '''
+ return ('FINISHED',)
+
+
bpy.ops.add(MESH_OT_delete_edgeloop)
bpy.ops.add(WM_OT_context_set_boolean)
@@ -376,3 +407,5 @@
bpy.ops.add(WM_OT_doc_view)
bpy.ops.add(WM_OT_doc_edit)
+
+bpy.ops.add(WM_OT_reload_scripts)
Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c 2009-11-13 11:10:29 UTC (rev 24545)
@@ -3704,7 +3704,7 @@
WM_keymap_verify_item(keymap, "SCREEN_OT_redo_last", F6KEY, KM_PRESS, 0, 0);
RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", F7KEY, KM_PRESS, 0, 0)->ptr, "path", "test.py");
- WM_keymap_verify_item(keymap, "SCRIPT_OT_python_run_ui_scripts", F8KEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "WM_OT_reload_scripts", F8KEY, KM_PRESS, 0, 0);
/* files */
WM_keymap_add_item(keymap, "FILE_OT_execute", RETKEY, KM_PRESS, 0, 0);
Modified: trunk/blender/source/blender/editors/space_script/script_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_edit.c 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/source/blender/editors/space_script/script_edit.c 2009-11-13 11:10:29 UTC (rev 24545)
@@ -89,34 +89,3 @@
RNA_def_string_file_path(ot->srna, "path", "", 512, "Path", "");
}
-static int run_ui_scripts_exec(bContext *C, wmOperator *op)
-{
-#ifndef DISABLE_PYTHON
-// TODO
-#endif
- return OPERATOR_FINISHED;
-}
-
-static int run_ui_scripts_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- int ret= run_ui_scripts_exec(C, op);
-
- if(ret==OPERATOR_FINISHED)
- WM_event_add_notifier(C, NC_WINDOW, NULL);
-
- return ret;
-}
-
-
-void SCRIPT_OT_python_run_ui_scripts(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Reload Python Interface";
- ot->description= "Reload Python interface.";
- ot->idname= "SCRIPT_OT_python_run_ui_scripts";
-
- /* api callbacks */
- ot->exec= run_ui_scripts_exec;
- ot->invoke= run_ui_scripts_invoke;
- ot->poll= ED_operator_areaactive;
-}
Modified: trunk/blender/source/blender/editors/space_script/script_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_intern.h 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/source/blender/editors/space_script/script_intern.h 2009-11-13 11:10:29 UTC (rev 24545)
@@ -40,7 +40,6 @@
/* script_edit.c */
void SCRIPT_OT_python_file_run(struct wmOperatorType *ot);
-void SCRIPT_OT_python_run_ui_scripts(struct wmOperatorType *ot);
#endif /* ED_SCRIPT_INTERN_H */
Modified: trunk/blender/source/blender/editors/space_script/script_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_script/script_ops.c 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/source/blender/editors/space_script/script_ops.c 2009-11-13 11:10:29 UTC (rev 24545)
@@ -60,7 +60,6 @@
void script_operatortypes(void)
{
WM_operatortype_append(SCRIPT_OT_python_file_run);
- WM_operatortype_append(SCRIPT_OT_python_run_ui_scripts);
}
void script_keymap(wmKeyConfig *keyconf)
@@ -69,6 +68,5 @@
/* TODO - this is just while we have no way to load a text datablock */
RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0)->ptr, "path", "test.py");
- WM_keymap_add_item(keymap, "SCRIPT_OT_python_run_ui_scripts", PKEY, KM_PRESS, KM_SHIFT, 0);
}
Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator.c 2009-11-13 10:53:58 UTC (rev 24544)
+++ trunk/blender/source/blender/python/intern/bpy_operator.c 2009-11-13 11:10:29 UTC (rev 24545)
@@ -57,13 +57,13 @@
// XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it...
bContext *C = BPy_GetContext();
- if (!PyArg_ParseTuple(args, "sO|O!i:bpy.__ops__.call", &opname, &context_dict, &PyDict_Type, &kw, &context))
+ if (!PyArg_ParseTuple(args, "sO|O!i:_bpy.ops.call", &opname, &context_dict, &PyDict_Type, &kw, &context))
return NULL;
ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format( PyExc_SystemError, "bpy.__ops__.call: operator \"%s\"could not be found", opname);
+ PyErr_Format( PyExc_SystemError, "_bpy.ops.call: operator \"%s\"could not be found", opname);
return NULL;
}
@@ -76,7 +76,7 @@
Py_XINCREF(context_dict); /* so we done loose it */
if(WM_operator_poll((bContext*)C, ot) == FALSE) {
- PyErr_SetString( PyExc_SystemError, "bpy.__ops__.call: operator poll() function failed, context is incorrect");
+ PyErr_SetString( PyExc_SystemError, "_bpy.ops.call: operator poll() function failed, context is incorrect");
error_val= -1;
}
else {
@@ -158,13 +158,13 @@
bContext *C = BPy_GetContext();
- if (!PyArg_ParseTuple(args, "s|O!i:bpy.__ops__.as_string", &opname, &PyDict_Type, &kw, &all_args))
+ if (!PyArg_ParseTuple(args, "s|O!i:_bpy.ops.as_string", &opname, &PyDict_Type, &kw, &all_args))
return NULL;
ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format( PyExc_SystemError, "bpy.__ops__.as_string: operator \"%s\"could not be found", opname);
+ PyErr_Format( PyExc_SystemError, "_bpy.ops.as_string: operator \"%s\"could not be found", opname);
return NULL;
}
@@ -217,12 +217,12 @@
BPy_StructRNA *pyrna= NULL;
if(opname==NULL) {
- PyErr_SetString(PyExc_TypeError, "bpy.__ops__.get_rna() expects a string argument");
+ PyErr_SetString(PyExc_TypeError, "_bpy.ops.get_rna() expects a string argument");
return NULL;
}
ot= WM_operatortype_find(opname, TRUE);
if(ot==NULL) {
- PyErr_Format(PyExc_KeyError, "bpy.__ops__.get_rna(\"%s\") not found", opname);
+ PyErr_Format(PyExc_KeyError, "_bpy.ops.get_rna(\"%s\") not found", opname);
return NULL;
}
@@ -245,8 +245,8 @@
static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL};
static PyMethodDef pyop_remove_meth = {"remove", (PyCFunction) PYOP_wrap_remove, METH_O, NULL};
- PyObject *submodule = PyModule_New("bpy.__ops__");
- PyDict_SetItemString(PySys_GetObject("modules"), "bpy.__ops__", submodule);
+ PyObject *submodule = PyModule_New("_bpy.ops");
+ PyDict_SetItemString(PySys_GetObject("modules"), "_bpy.ops", submodule);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list