Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-04-11 14:01:49 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-04-11 14:01:49 +0400
commit963e217c2a66fa9bb77c6773776a3db2ee4cd176 (patch)
tree024843ab3d52a4975f9762af6ac28ade080645f0
parent59578bfad2b5ab0cd8cb384840ebf17761651851 (diff)
undo previous commit, changing running the script to importing it somehow made it crash when running the class functions. will look into this further.
-rw-r--r--release/ui/buttons_objects.py2
-rw-r--r--source/blender/python/BPY_extern.h2
-rw-r--r--source/blender/python/intern/bpy_interface.c118
-rw-r--r--source/creator/creator.c2
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