diff options
-rw-r--r-- | release/scripts/io/netrender/__init__.py | 18 | ||||
-rw-r--r-- | release/scripts/modules/bpy/__init__.py | 50 | ||||
-rw-r--r-- | release/scripts/modules/bpy/ops.py (renamed from release/scripts/modules/bpy_ops.py) | 15 | ||||
-rw-r--r-- | release/scripts/modules/bpy/utils.py (renamed from release/scripts/modules/bpy_utils.py) | 3 | ||||
-rw-r--r-- | release/scripts/modules/bpy_ext/Mesh.py | 0 | ||||
-rw-r--r-- | release/scripts/modules/bpy_ext/Object.py | 0 | ||||
-rw-r--r-- | release/scripts/modules/bpy_ext/__init__.py | 0 | ||||
-rw-r--r-- | release/scripts/modules/bpy_types.py | 10 | ||||
-rw-r--r-- | source/blender/editors/space_script/script_edit.c | 2 | ||||
-rw-r--r-- | source/blender/python/BPY_extern.h | 4 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 131 | ||||
-rw-r--r-- | source/blender/python/intern/stubs.c | 1 | ||||
-rw-r--r-- | source/creator/creator.c | 16 |
13 files changed, 96 insertions, 154 deletions
diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py index be3d25d83fe..3a170529aa5 100644 --- a/release/scripts/io/netrender/__init__.py +++ b/release/scripts/io/netrender/__init__.py @@ -18,15 +18,15 @@ # This directory is a Python package. -import model -import operators -import client -import slave -import master -import master_html -import utils -import balancing -import ui +from netrender import model +from netrender import operators +from netrender import client +from netrender import slave +from netrender import master +from netrender import master_html +from netrender import utils +from netrender import balancing +from netrender import ui # store temp data in bpy module diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py new file mode 100644 index 00000000000..aa755bbc845 --- /dev/null +++ b/release/scripts/modules/bpy/__init__.py @@ -0,0 +1,50 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# internal blender C module +import _bpy +from _bpy import types, props + +data = _bpy.data +context = _bpy.context + +# python modules +from bpy import utils, ops + +# fake operator module +ops = ops.bpy_ops() + +# load all scripts +import os +import sys + +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 + __import__(f[0:-3]) + elif "." not in f: + # python package + __import__(f) diff --git a/release/scripts/modules/bpy_ops.py b/release/scripts/modules/bpy/ops.py index 35d986fe09d..e3fa2ab94ca 100644 --- a/release/scripts/modules/bpy_ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -19,12 +19,14 @@ # <pep8-80 compliant> # for slightly faster access -from bpy.__ops__ import add as op_add -from bpy.__ops__ import remove as op_remove -from bpy.__ops__ import dir as op_dir -from bpy.__ops__ import call as op_call -from bpy.__ops__ import as_string as op_as_string -from bpy.__ops__ import get_rna as op_get_rna +from _bpy import ops as ops_module + +op_add = ops_module.add +op_remove = ops_module.remove +op_dir = ops_module.dir +op_call = ops_module.call +op_as_string = ops_module.as_string +op_get_rna = ops_module.get_rna # Keep in sync with WM_types.h context_dict = { @@ -192,3 +194,4 @@ class bpy_ops_submodule_op(object): import bpy bpy.ops = bpy_ops() + diff --git a/release/scripts/modules/bpy_utils.py b/release/scripts/modules/bpy/utils.py index 5a73364c1b1..8509bf1ee9e 100644 --- a/release/scripts/modules/bpy_utils.py +++ b/release/scripts/modules/bpy/utils.py @@ -25,6 +25,3 @@ def expandpath(path): return path -import types -bpy.utils = types.ModuleType("bpy.utils") -bpy.utils.expandpath = expandpath diff --git a/release/scripts/modules/bpy_ext/Mesh.py b/release/scripts/modules/bpy_ext/Mesh.py deleted file mode 100644 index e69de29bb2d..00000000000 --- a/release/scripts/modules/bpy_ext/Mesh.py +++ /dev/null diff --git a/release/scripts/modules/bpy_ext/Object.py b/release/scripts/modules/bpy_ext/Object.py deleted file mode 100644 index e69de29bb2d..00000000000 --- a/release/scripts/modules/bpy_ext/Object.py +++ /dev/null diff --git a/release/scripts/modules/bpy_ext/__init__.py b/release/scripts/modules/bpy_ext/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 --- a/release/scripts/modules/bpy_ext/__init__.py +++ /dev/null diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 5a8b46c92d6..6acff401b93 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -16,10 +16,10 @@ # # ##### END GPL LICENSE BLOCK ##### -import bpy +from _bpy import types as bpy_types -StructRNA = bpy.types.Struct.__bases__[0] -# StructRNA = bpy.types.Struct +StructRNA = bpy_types.Struct.__bases__[0] +# StructRNA = bpy_types.Struct class Context(StructRNA): @@ -34,7 +34,7 @@ class Context(StructRNA): return new_context -class Object(bpy.types.ID): +class Object(bpy_types.ID): def _get_children(self): return [child for child in bpy.data.objects if child.parent == self] @@ -46,7 +46,7 @@ def ord_ind(i1,i2): if i1<i2: return i1,i2 return i2,i1 -class Mesh(bpy.types.ID): +class Mesh(bpy_types.ID): def _get_edge_keys(self): return [edge_key for face in self.faces for edge_key in face.edge_keys] diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index df6f932acdf..630ea752f22 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -92,7 +92,7 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot) static int run_ui_scripts_exec(bContext *C, wmOperator *op) { #ifndef DISABLE_PYTHON - BPY_run_ui_scripts(C, 1); /* reload */ +// TODO #endif return OPERATOR_FINISHED; } diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index e73dec097a3..580d39b1e3f 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -84,7 +84,6 @@ extern "C" { void BPY_start_python( int argc, char **argv ); void BPY_end_python( void ); - void BPY_post_start_python( void ); void init_syspath( int first_time ); void syspath_append( char *dir ); void BPY_rebuild_syspath( void ); @@ -101,7 +100,6 @@ extern "C" { /* 2.5 UI Scripts */ int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text, struct ReportList *reports ); // 2.5 working int BPY_run_script_space_draw(const struct bContext *C, struct SpaceScript * sc); // 2.5 working - void BPY_run_ui_scripts(struct bContext *C, int reload); // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working void BPY_update_modules( void ); // XXX - annoying, need this for pointers that get out of date @@ -137,7 +135,7 @@ extern "C" { void error_pyscript( void ); void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */ - + void BPY_set_context(struct bContext *C); /* void BPY_Err_Handle(struct Text *text); */ /* int BPY_spacetext_is_pywin(struct SpaceText *st); */ diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 47505f478af..1eb48b18a5a 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -186,10 +186,10 @@ static void bpy_init_modules( void ) Py_DECREF(py_modpath); } - mod = PyModule_New("bpy"); + mod = PyModule_New("_bpy"); /* add the module so we can import it */ - PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod); + PyDict_SetItemString(PySys_GetObject("modules"), "_bpy", mod); Py_DECREF(mod); /* run first, initializes rna types */ @@ -201,7 +201,7 @@ static void bpy_init_modules( void ) bpy_import_test("bpy_types"); /* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */ PyModule_AddObject( mod, "props", BPY_rna_props() ); - PyModule_AddObject( mod, "__ops__", BPY_operator_module() ); /* ops is now a python module that does the conversion from SOME_OT_foo -> some.foo */ + PyModule_AddObject( mod, "ops", BPY_operator_module() ); /* ops is now a python module that does the conversion from SOME_OT_foo -> some.foo */ PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very experimental, consider this a test, especially PyCObject is not meant to be permanent @@ -219,11 +219,8 @@ static void bpy_init_modules( void ) Mathutils_Init(); BGL_Init(); - /* add our own modules dir */ - { - bpy_import_test("bpy_ops"); /* adds its self to bpy.ops */ - bpy_import_test("bpy_utils"); /* adds its self to bpy.sys */ - } + /* add our own modules dir, this is a python package */ + bpy_import_test("bpy"); } void BPY_update_modules( void ) @@ -303,6 +300,13 @@ void BPY_start_python_path(void) } + +void BPY_set_context(bContext *C) +{ + BPy_SetContext(C); +} + +/* call BPY_set_context first */ void BPY_start_python( int argc, char **argv ) { PyThreadState *py_tstate = NULL; @@ -600,117 +604,6 @@ int BPY_run_python_script_space(const char *modulename, const char *func) #include "PIL_time.h" #endif -/* for use by BPY_run_ui_scripts only */ -static int bpy_import_module(char *modname, int reload) -{ - PyObject *mod= PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0); - if (mod) { - if (reload) { - PyObject *mod_orig= mod; - mod= PyImport_ReloadModule(mod); - Py_DECREF(mod_orig); - } - } - - if(mod) { - Py_DECREF(mod); /* could be NULL from reloading */ - return 0; - } else { - return -1; - } -} - -/* XXX this is temporary, need a proper script registration system for 2.5 */ -void BPY_run_ui_scripts(bContext *C, int reload) -{ -#ifdef TIME_REGISTRATION - double time = PIL_check_seconds_timer(); -#endif - DIR *dir; - struct dirent *de; - char *file_extension; - char *dirname; - char path[FILE_MAX]; - char *dirs[] = {"scripts/ui", "scripts/op", "scripts/io", NULL}; - int path_flags[] = {BLI_GETHOME_LOCAL|BLI_GETHOME_SYSTEM, BLI_GETHOME_USER}; /* SYSTEM / NON-SYSTEM */ - int a, err, flag_iter; - - PyGILState_STATE gilstate; - PyObject *sys_path; - - bpy_context_set(C, &gilstate); - - sys_path= PySys_GetObject("path"); /* borrow */ - PyList_Insert(sys_path, 0, Py_None); /* place holder, resizes the list */ - - /* Scan system scripts first, then local/user */ - for(flag_iter=0; flag_iter < sizeof(path_flags)/sizeof(int); flag_iter++) { - - for(a=0; dirs[a]; a++) { - dirname= BLI_gethome_folder(dirs[a], path_flags[flag_iter]); - - if(!dirname) - continue; - - dir = opendir(dirname); - - if(!dir) - continue; - - /* set the first dir in the sys.path for fast importing of modules */ - PyList_SetItem(sys_path, 0, PyUnicode_FromString(dirname)); /* steals the ref */ - - while((de = readdir(dir)) != NULL) { - /* We could stat the file but easier just to let python - * import it and complain if theres a problem */ - err = 0; - - if (de->d_name[0] == '.') { - /* do nothing, probably .svn */ - } - else if ((file_extension = strstr(de->d_name, ".py"))) { - /* normal py files? */ - if(file_extension && file_extension[3] == '\0') { - de->d_name[(file_extension - de->d_name)] = '\0'; - err= bpy_import_module(de->d_name, reload); - } - } -#ifndef __linux__ - else if( BLI_join_dirfile(path, dirname, de->d_name), S_ISDIR(BLI_exist(path))) { -#else - else if(de->d_type==DT_DIR) { - BLI_join_dirfile(path, dirname, de->d_name); -#endif - /* support packages */ - BLI_join_dirfile(path, path, "__init__.py"); - - if(BLI_exists(path)) { - err= bpy_import_module(de->d_name, reload); - } - } - - if(err==-1) { - BPy_errors_to_report(NULL); - fprintf(stderr, "unable to import %s/%s\n", dirname, de->d_name); - } - } - - closedir(dir); - } - } - - PyList_SetSlice(sys_path, 0, 1, NULL); /* remove the first item */ - - bpy_context_clear(C, &gilstate); - -#ifdef TIME_REGISTRATION - printf("script time %f\n", (PIL_check_seconds_timer()-time)); -#endif - - /* reset the timer so as not to take loading into the stats */ - bpy_timer_count = 0; -} - /* ****************************************** */ /* Drivers - PyExpression Evaluation */ diff --git a/source/blender/python/intern/stubs.c b/source/blender/python/intern/stubs.c index 94bdb6ba6ab..303fd84ee60 100644 --- a/source/blender/python/intern/stubs.c +++ b/source/blender/python/intern/stubs.c @@ -27,7 +27,6 @@ */ /* python, will come back */ -void BPY_post_start_python() {} //void BPY_run_python_script() {} //void BPY_start_python() {} void BPY_call_importloader() {} diff --git a/source/creator/creator.c b/source/creator/creator.c index b4c962cbfc8..6535f578cc1 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -489,11 +489,12 @@ int main(int argc, char **argv) } } -#ifndef DISABLE_PYTHON - BPY_start_python(argc, argv); -#endif - WM_init(C); + +#ifndef DISABLE_PYTHON + BPY_set_context(C); /* necessary evil */ + BPY_start_python(argc, argv); +#endif // XXX BRECHT SOLVE BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */ @@ -530,6 +531,7 @@ int main(int argc, char **argv) WM_init(C); #ifndef DISABLE_PYTHON + BPY_set_context(C); /* necessary evil */ BPY_start_python(argc, argv); #endif BLI_where_is_temp( btempdir, 0 ); /* call after loading the .B.blend so we can read U.tempdir */ @@ -543,13 +545,13 @@ int main(int argc, char **argv) * Update: now this function also inits the bpymenus, which also depend * on U.pythondir. */ - BPY_post_start_python(); + + // TODO - U.pythondir - BPY_run_ui_scripts(C, 0); /* dont need to reload the first time */ #endif CTX_py_init_set(C, 1); - WM_keymap_init(C); /* after BPY_run_ui_scripts() */ + WM_keymap_init(C); #ifdef WITH_QUICKTIME |