[Bf-taskforce25] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19666] ...
Shaul Kedem
shaul.kedem at gmail.com
Tue Apr 14 15:36:12 CEST 2009
this will cause issues with linux builds, which use 2.x right now
On Tue, Apr 14, 2009 at 5:03 AM, Campbell Barton <ideasman42 at gmail.com> wrote:
> Though we still didn't agree to move to py3 yet.
> My preference is to add python 3.0.1 into the windows and mac libs dir
> and set the python version to 3 in the build systems default config.
>
> Then we can also look at ways to bundle python with blender.
>
> On Mon, Apr 13, 2009 at 6:03 AM, Ton Roosendaal <ton at blender.org> wrote:
>> Hi Campbell,
>>
>> This call:
>>
>> PyImport_ImportModuleLevel()
>>
>> is new in Python 2.5. Maybe it's easier for our code to drop support of
>> older python versions? Put it in the lib dir in svn or what was your
>> idea?
>>
>> -Ton-
>>
>> ------------------------------------------------------------------------
>> Ton Roosendaal Blender Foundation ton at blender.org www.blender.org
>> Blender Institute BV Entrepotdok 57A 1018AD Amsterdam The Netherlands
>>
>> On 11 Apr, 2009, at 18:17, Campbell Barton wrote:
>>
>>> Revision: 19666
>>>
>>> http://projects.blender.org/plugins/scmsvn/viewcvs.php?
>>> view=rev&root=bf-blender&revision=19666
>>> Author: campbellbarton
>>> Date: 2009-04-11 18:17:39 +0200 (Sat, 11 Apr 2009)
>>>
>>> Log Message:
>>> -----------
>>> Added back importing UI scripts rather then running,
>>> The bug was todo with bpy.data and bpy.types becoming invalid,
>>> temporary fix is to re-assign them to the bpy module before running
>>> python operators or panels.
>>> will look into a nicer way to get this working.
>>>
>>> Modified Paths:
>>> --------------
>>> branches/blender2.5/blender/release/ui/buttons_objects.py
>>> branches/blender2.5/blender/source/blender/python/BPY_extern.h
>>>
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_interface.c
>>>
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_operator_wrap.c
>>>
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_panel_wrap.c
>>> branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
>>> branches/blender2.5/blender/source/blender/python/intern/bpy_util.h
>>>
>>> Modified: branches/blender2.5/blender/release/ui/buttons_objects.py
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/release/ui/buttons_objects.py 2009-04-11
>>> 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/release/ui/buttons_objects.py 2009-04-11
>>> 16:17:39 UTC (rev 19666)
>>> @@ -1,4 +1,4 @@
>>> -# import bpy
>>> +import bpy
>>>
>>> class OBJECT_PT_transform(bpy.types.Panel):
>>> __label__ = "Transform"
>>>
>>> Modified:
>>> branches/blender2.5/blender/source/blender/python/BPY_extern.h
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/source/blender/python/BPY_extern.h 2009
>>> -04-11 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/source/blender/python/BPY_extern.h 2009
>>> -04-11 16:17:39 UTC (rev 19666)
>>> @@ -101,6 +101,7 @@
>>> int BPY_run_script_space_draw(struct bContext *C, struct SpaceScript
>>> * sc); // 2.5 working
>>> 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
>>> + void BPY_update_modules( void ); // XXX - annoying, need this for
>>> pointers that get out of date
>>>
>>>
>>>
>>>
>>> Modified:
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_interface.c
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_interface.c 2009-04-11 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_interface.c 2009-04-11 16:17:39 UTC (rev 19666)
>>> @@ -26,6 +26,7 @@
>>> #include "MEM_guardedalloc.h"
>>>
>>> #include "BLI_util.h"
>>> +#include "BLI_string.h"
>>>
>>> #include "BKE_context.h"
>>> #include "BKE_text.h"
>>> @@ -39,22 +40,13 @@
>>> }
>>>
>>>
>>> /
>>> ***********************************************************************
>>> ******
>>> -* Description: This function creates a new Python dictionary object.
>>> +* Description: Creates the bpy module and adds it to sys.modules for
>>> importing
>>>
>>> ***********************************************************************
>>> ******/
>>> -
>>> -static PyObject *CreateGlobalDictionary( bContext *C )
>>> +static void bpy_init_modules( void )
>>> {
>>> 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() ); */
>>> @@ -62,12 +54,35 @@
>>> 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);
>>> +}
>>> +
>>> +void BPY_update_modules( void )
>>> +{
>>> + PyObject *mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL,
>>> 0);
>>> + PyModule_AddObject( mod, "data", BPY_rna_module() );
>>> + PyModule_AddObject( mod, "types", BPY_rna_types() );
>>> +}
>>> +
>>> +/
>>> ***********************************************************************
>>> ******
>>> +* 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;
>>> @@ -83,13 +98,18 @@
>>> }
>>> }
>>>
>>> + /* 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 );
>>> @@ -97,8 +117,11 @@
>>> /* Initialize thread support (also acquires lock) */
>>> PyEval_InitThreads();
>>>
>>> - // todo - sys paths - our own imports
>>>
>>> + /* bpy.* and lets us import it */
>>> + bpy_init_modules();
>>> +
>>> +
>>> py_tstate = PyGILState_GetThisThreadState();
>>> PyEval_ReleaseThread(py_tstate);
>>>
>>> @@ -304,16 +327,30 @@
>>> }
>>> #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(bContext *C)
>>> +void BPY_run_ui_scripts(void)
>>> {
>>> +#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;
>>>
>>> @@ -321,23 +358,49 @@
>>>
>>> if(!dir)
>>> return;
>>> -
>>> - if (dir != NULL) {
>>> - while((de = readdir(dir)) != NULL) {
>>> - BLI_make_file_string("/", path, dirname, de->d_name);
>>> +
>>> + 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 */
>>>
>>> - 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);
>>> + 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);
>>> - }
>>> + 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
>>> }
>>>
>>>
>>> Modified:
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_operator_wrap.c
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_operator_wrap.c 2009-04-11 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_operator_wrap.c 2009-04-11 16:17:39 UTC (rev 19666)
>>> @@ -181,6 +181,8 @@
>>> #define PYOP_INVOKE 2
>>> #define PYOP_POLL 3
>>>
>>> +extern void BPY_update_modules( void ); //XXX temp solution
>>> +
>>> static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op,
>>> wmEvent *event)
>>> {
>>> PyObject *py_class = op->type->pyop_data;
>>> @@ -189,6 +191,8 @@
>>> int ret_flag= (mode==PYOP_POLL ? 0:OPERATOR_CANCELLED);
>>>
>>> PyGILState_STATE gilstate = PyGILState_Ensure();
>>> +
>>> + BPY_update_modules(); // XXX - the RNA pointers can change so update
>>> before running, would like a nicer solutuon for this.
>>>
>>> args = PyTuple_New(1);
>>> PyTuple_SET_ITEM(args, 0, PyObject_GetAttrString(py_class,
>>> "__rna__")); // need to use an rna instance as the first arg
>>>
>>> Modified:
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_panel_wrap.c
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_panel_wrap.c 2009-04-11 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/source/blender/python/intern/
>>> bpy_panel_wrap.c 2009-04-11 16:17:39 UTC (rev 19666)
>>> @@ -44,6 +44,8 @@
>>> #define PYPANEL_DRAW 1
>>> #define PYPANEL_POLL 2
>>>
>>> +extern void BPY_update_modules( void ); //XXX temp solution
>>> +
>>> static int PyPanel_generic(int mode, const bContext *C, Panel *pnl)
>>> {
>>> PyObject *py_class= (PyObject *)(pnl->type->py_data);
>>> @@ -55,6 +57,8 @@
>>>
>>> PyGILState_STATE gilstate = PyGILState_Ensure();
>>>
>>> + BPY_update_modules(); // XXX - the RNA pointers can change so update
>>> before running, would like a nicer solutuon for this.
>>> +
>>> args = PyTuple_New(1);
>>> RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->srna, pnl,
>>> &panelptr);
>>> PyTuple_SET_ITEM(args, 0, pyrna_struct_CreatePyObject(&panelptr));
>>>
>>> Modified:
>>> branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
>>> ===================================================================
>>> ---
>>> branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
>>> 2009-04-11 16:10:15 UTC (rev 19665)
>>> +++
>>> branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
>>> 2009-04-11 16:17:39 UTC (rev 19666)
>>> @@ -1714,22 +1714,23 @@
>>> return list;
>>> }
>>>
>>> -PyTypeObject pyrna_basetype_Type;
>>> +PyTypeObject pyrna_basetype_Type = BLANK_PYTHON_TYPE;
>>>
>>> PyObject *BPY_rna_types(void)
>>> {
>>> BPy_BaseTypeRNA *self;
>>>
>>> - memset(&pyrna_basetype_Type, 0, sizeof(pyrna_basetype_Type));
>>> - pyrna_basetype_Type.tp_name = "RNA_Types";
>>> - pyrna_basetype_Type.tp_basicsize = sizeof( BPy_BaseTypeRNA );
>>> - pyrna_basetype_Type.tp_getattro = ( getattrofunc
>>> )pyrna_basetype_getattro;
>>> - pyrna_basetype_Type.tp_flags = Py_TPFLAGS_DEFAULT;
>>> - pyrna_basetype_Type.tp_methods = pyrna_basetype_methods;
>>> + if ((pyrna_basetype_Type.tp_flags & Py_TPFLAGS_READY)==0) {
>>> + pyrna_basetype_Type.tp_name = "RNA_Types";
>>> + pyrna_basetype_Type.tp_basicsize = sizeof( BPy_BaseTypeRNA );
>>> + pyrna_basetype_Type.tp_getattro = ( getattrofunc
>>> )pyrna_basetype_getattro;
>>> + pyrna_basetype_Type.tp_flags = Py_TPFLAGS_DEFAULT;
>>> + pyrna_basetype_Type.tp_methods = pyrna_basetype_methods;
>>> +
>>> + if( PyType_Ready( &pyrna_basetype_Type ) < 0 )
>>> + return NULL;
>>> + }
>>>
>>> - if( PyType_Ready( &pyrna_basetype_Type ) < 0 )
>>> - return NULL;
>>> -
>>> self= (BPy_BaseTypeRNA *)PyObject_NEW( BPy_BaseTypeRNA,
>>> &pyrna_basetype_Type );
>>>
>>>
>>> @@ Diff output truncated at 10240 characters. @@
>>>
>>> _______________________________________________
>>> Bf-blender-cvs mailing list
>>> Bf-blender-cvs at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>>
>>
>> _______________________________________________
>> Bf-taskforce25 mailing list
>> Bf-taskforce25 at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-taskforce25
>>
>
>
>
> --
> - Campbell
> _______________________________________________
> Bf-taskforce25 mailing list
> Bf-taskforce25 at blender.org
> http://lists.blender.org/mailman/listinfo/bf-taskforce25
>
More information about the Bf-taskforce25
mailing list