undo previous commit, changing running the script to importing it somehow made it crash when running the class functions. will look into this further.

This commit is contained in:
2009-04-11 10:01:49 +00:00
parent 59578bfad2
commit 963e217c2a
4 changed files with 38 additions and 94 deletions

View File

@@ -1,4 +1,4 @@
import bpy # import bpy
class OBJECT_PT_transform(bpy.types.Panel): class OBJECT_PT_transform(bpy.types.Panel):
__label__ = "Transform" __label__ = "Transform"

View File

@@ -99,7 +99,7 @@ extern "C" {
/* 2.5 UI Scripts */ /* 2.5 UI Scripts */
int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text ); // 2.5 working 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 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 // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working

View File

@@ -26,7 +26,6 @@
#include "MEM_guardedalloc.h" #include "MEM_guardedalloc.h"
#include "BLI_util.h" #include "BLI_util.h"
#include "BLI_string.h"
#include "BKE_context.h" #include "BKE_context.h"
#include "BKE_text.h" #include "BKE_text.h"
@@ -39,29 +38,10 @@ void BPY_free_compiled_text( struct Text *text )
} }
} }
/*****************************************************************************
* Description: Creates the bpy module and adds it to sys.modules for importing
*****************************************************************************/
static void BPY_init_modules( void )
{
PyObject *mod;
mod = PyModule_New("bpy");
PyModule_AddObject( mod, "data", BPY_rna_module() );
/* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */
PyModule_AddObject( mod, "types", BPY_rna_types() );
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. * Description: This function creates a new Python dictionary object.
*****************************************************************************/ *****************************************************************************/
static PyObject *CreateGlobalDictionary( bContext *C ) static PyObject *CreateGlobalDictionary( bContext *C )
{ {
PyObject *mod; PyObject *mod;
@@ -71,11 +51,23 @@ static PyObject *CreateGlobalDictionary( bContext *C )
PyDict_SetItemString( dict, "__name__", item ); PyDict_SetItemString( dict, "__name__", item );
Py_DECREF(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() ); */
PyModule_AddObject( mod, "types", BPY_rna_types() );
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
// XXX - evil, need to access context // XXX - evil, need to access context
item = PyCObject_FromVoidPtr( C, NULL ); item = PyCObject_FromVoidPtr( C, NULL );
PyDict_SetItemString( dict, "__bpy_context__", item ); PyDict_SetItemString( dict, "__bpy_context__", item );
Py_DECREF(item); Py_DECREF(item);
// XXX - put somewhere more logical // XXX - put somewhere more logical
{ {
PyMethodDef *ml; 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; return dict;
} }
void BPY_start_python( void ) void BPY_start_python( void )
{ {
PyThreadState *py_tstate = NULL; PyThreadState *py_tstate = NULL;
Py_Initialize( ); Py_Initialize( );
//PySys_SetArgv( argc_copy, argv_copy ); //PySys_SetArgv( argc_copy, argv_copy );
@@ -110,10 +97,7 @@ void BPY_start_python( void )
/* Initialize thread support (also acquires lock) */ /* Initialize thread support (also acquires lock) */
PyEval_InitThreads(); PyEval_InitThreads();
// todo - sys paths - our own imports
/* bpy.* and lets us import it */
BPY_init_modules();
py_tstate = PyGILState_GetThisThreadState(); py_tstate = PyGILState_GetThisThreadState();
PyEval_ReleaseThread(py_tstate); PyEval_ReleaseThread(py_tstate);
@@ -320,30 +304,16 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
} }
#endif #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 */ /* 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; DIR *dir;
struct dirent *de; struct dirent *de;
struct stat status;
char *file_extension; char *file_extension;
char path[FILE_MAX]; char path[FILE_MAX];
char *dirname= BLI_gethome_folder("ui"); 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) if(!dirname)
return; return;
@@ -351,49 +321,23 @@ void BPY_run_ui_scripts(void)
if(!dir) if(!dir)
return; 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 */
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);
}
}
}
closedir(dir); if (dir != NULL) {
while((de = readdir(dir)) != NULL) {
PySys_SetObject("path", sys_path_orig); BLI_make_file_string("/", path, dirname, de->d_name);
Py_DECREF(sys_path_orig);
stat(path, &status);
PyGILState_Release(gilstate);
#ifdef TIME_REGISTRATION /* run if it is a .py file */
printf("script time %f\n", (PIL_check_seconds_timer()-time)); if(S_ISREG(status.st_mode)) {
#endif file_extension = strstr(de->d_name, ".py");
if(file_extension && *(file_extension + 3) == '\0')
BPY_run_python_script(C, path, NULL);
}
}
closedir(dir);
}
} }

View File

@@ -529,7 +529,7 @@ int main(int argc, char **argv)
*/ */
BPY_post_start_python(); BPY_post_start_python();
BPY_run_ui_scripts(); BPY_run_ui_scripts(C);
#endif #endif
#ifdef WITH_QUICKTIME #ifdef WITH_QUICKTIME