diff options
-rw-r--r-- | release/ui/buttons_objects.py | 2 | ||||
-rw-r--r-- | source/blender/python/BPY_extern.h | 2 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 118 | ||||
-rw-r--r-- | source/creator/creator.c | 2 |
4 files changed, 34 insertions, 90 deletions
diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py index 9e4cb9340a4..8cf27fcf8c2 100644 --- a/release/ui/buttons_objects.py +++ b/release/ui/buttons_objects.py @@ -1,4 +1,4 @@ -import bpy +# import bpy class OBJECT_PT_transform(bpy.types.Panel): __label__ = "Transform" diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index bb22432d90f..f46ef0fa670 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -99,7 +99,7 @@ extern "C" { /* 2.5 UI Scripts */ int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text ); // 2.5 working int BPY_run_script_space_draw(struct bContext *C, struct SpaceScript * sc); // 2.5 working - void BPY_run_ui_scripts(void); + void BPY_run_ui_scripts(struct bContext *C); // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index db82b740a15..c9485e0f22a 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -26,7 +26,6 @@ #include "MEM_guardedalloc.h" #include "BLI_util.h" -#include "BLI_string.h" #include "BKE_context.h" #include "BKE_text.h" @@ -40,13 +39,22 @@ void BPY_free_compiled_text( struct Text *text ) } /***************************************************************************** -* Description: Creates the bpy module and adds it to sys.modules for importing +* Description: This function creates a new Python dictionary object. *****************************************************************************/ -static void BPY_init_modules( void ) + +static PyObject *CreateGlobalDictionary( bContext *C ) { PyObject *mod; + PyObject *dict = PyDict_New( ); + PyObject *item = PyUnicode_FromString( "__main__" ); + PyDict_SetItemString( dict, "__builtins__", PyEval_GetBuiltins( ) ); + PyDict_SetItemString( dict, "__name__", item ); + Py_DECREF(item); + /* add bpy to global namespace */ mod = PyModule_New("bpy"); + PyDict_SetItemString( dict, "bpy", mod ); + Py_DECREF(mod); PyModule_AddObject( mod, "data", BPY_rna_module() ); /* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */ @@ -54,28 +62,12 @@ static void BPY_init_modules( void ) PyModule_AddObject( mod, "ops", BPY_operator_module() ); PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very experemental, consider this a test, especially PyCObject is not meant to be perminant - /* add the module so we can import it */ - PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod); - Py_DECREF(mod); -} - -/***************************************************************************** -* Description: This function creates a new Python dictionary object. -*****************************************************************************/ -static PyObject *CreateGlobalDictionary( bContext *C ) -{ - PyObject *mod; - PyObject *dict = PyDict_New( ); - PyObject *item = PyUnicode_FromString( "__main__" ); - PyDict_SetItemString( dict, "__builtins__", PyEval_GetBuiltins( ) ); - PyDict_SetItemString( dict, "__name__", item ); - Py_DECREF(item); - // XXX - evil, need to access context item = PyCObject_FromVoidPtr( C, NULL ); PyDict_SetItemString( dict, "__bpy_context__", item ); Py_DECREF(item); + // XXX - put somewhere more logical { PyMethodDef *ml; @@ -91,18 +83,13 @@ static PyObject *CreateGlobalDictionary( bContext *C ) } } - /* add bpy to global namespace */ - mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0); - PyDict_SetItemString( dict, "bpy", mod ); - Py_DECREF(mod); - return dict; } void BPY_start_python( void ) { PyThreadState *py_tstate = NULL; - + Py_Initialize( ); //PySys_SetArgv( argc_copy, argv_copy ); @@ -110,10 +97,7 @@ void BPY_start_python( void ) /* Initialize thread support (also acquires lock) */ PyEval_InitThreads(); - - /* bpy.* and lets us import it */ - BPY_init_modules(); - + // todo - sys paths - our own imports py_tstate = PyGILState_GetThisThreadState(); PyEval_ReleaseThread(py_tstate); @@ -320,30 +304,16 @@ int BPY_run_python_script_space(const char *modulename, const char *func) } #endif -// #define TIME_REGISTRATION - -#ifdef TIME_REGISTRATION -#include "PIL_time.h" -#endif - /* XXX this is temporary, need a proper script registration system for 2.5 */ -void BPY_run_ui_scripts(void) +void BPY_run_ui_scripts(bContext *C) { -#ifdef TIME_REGISTRATION - double time = PIL_check_seconds_timer(); -#endif DIR *dir; struct dirent *de; + struct stat status; char *file_extension; char path[FILE_MAX]; char *dirname= BLI_gethome_folder("ui"); - int filelen; /* filename length */ - - PyGILState_STATE gilstate; - PyObject *mod; - PyObject *sys_path_orig; - PyObject *sys_path_new; - + if(!dirname) return; @@ -351,49 +321,23 @@ void BPY_run_ui_scripts(void) if(!dir) return; - - gilstate = PyGILState_Ensure(); - - /* backup sys.path */ - sys_path_orig= PySys_GetObject("path"); - Py_INCREF(sys_path_orig); /* dont free it */ - - sys_path_new= PyList_New(1); - PyList_SET_ITEM(sys_path_new, 0, PyUnicode_FromString(dirname)); - PySys_SetObject("path", sys_path_new); - Py_DECREF(sys_path_new); - - - while((de = readdir(dir)) != NULL) { - /* We could stat the file but easier just to let python - * import it and complain if theres a problem */ - - file_extension = strstr(de->d_name, ".py"); - - if(file_extension && *(file_extension + 3) == '\0') { - filelen = strlen(de->d_name); - BLI_strncpy(path, de->d_name, filelen-2); /* cut off the .py on copy */ + + if (dir != NULL) { + while((de = readdir(dir)) != NULL) { + BLI_make_file_string("/", path, dirname, de->d_name); - mod= PyImport_ImportModuleLevel(path, NULL, NULL, NULL, 0); - if (mod) { - Py_DECREF(mod); - } - else { - PyErr_Print(); - fprintf(stderr, "unable to import \"%s\" %s/%s\n", path, dirname, de->d_name); + stat(path, &status); + + /* run if it is a .py file */ + if(S_ISREG(status.st_mode)) { + file_extension = strstr(de->d_name, ".py"); + + if(file_extension && *(file_extension + 3) == '\0') + BPY_run_python_script(C, path, NULL); } - } - } - closedir(dir); - - PySys_SetObject("path", sys_path_orig); - Py_DECREF(sys_path_orig); - - PyGILState_Release(gilstate); -#ifdef TIME_REGISTRATION - printf("script time %f\n", (PIL_check_seconds_timer()-time)); -#endif + closedir(dir); + } } diff --git a/source/creator/creator.c b/source/creator/creator.c index cb1fc18248f..082f2395b3f 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -529,7 +529,7 @@ int main(int argc, char **argv) */ BPY_post_start_python(); - BPY_run_ui_scripts(); + BPY_run_ui_scripts(C); #endif #ifdef WITH_QUICKTIME |