diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-02-11 17:08:22 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-02-11 17:08:22 +0300 |
commit | 8f4c340915fbfc65f9380b9a8561ed877c7dab87 (patch) | |
tree | faff718fe726b2a4cb3dee1cd93e58e0ba4a94e0 /source/blender/python/intern | |
parent | a2b94de5397f3a259c4244379b7fa89e57769d82 (diff) |
bpy.utils.home_paths, use this to get script paths for the user/local/system blender paths.
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r-- | source/blender/python/intern/bpy.c | 133 | ||||
-rw-r--r-- | source/blender/python/intern/bpy.h | 25 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 84 |
3 files changed, 162 insertions, 80 deletions
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c new file mode 100644 index 00000000000..6949fb2797c --- /dev/null +++ b/source/blender/python/intern/bpy.c @@ -0,0 +1,133 @@ +/** + * $Id: + * + * ***** 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. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/* This file defines the '_bpy' module which is used by python's 'bpy' package. + * a script writer should never directly access this module */ + +#include <Python.h> + +#include "bpy_rna.h" +#include "bpy_app.h" +#include "bpy_props.h" +#include "bpy_operator.h" + +#include "BLI_path_util.h" + + /* external util modules */ +#include "../generic/Mathutils.h" +#include "../generic/Geometry.h" +#include "../generic/BGL.h" +#include "../generic/IDProp.h" + +/* todo, make nice syntax for sphinx */ +static char bpy_home_paths_doc[] = "home_paths(subfolder), return 3 paths to blender home directories (system, local, user), strings will be empty when not found."; + +PyObject *bpy_home_paths(PyObject *self, PyObject *args) +{ + PyObject *ret= PyTuple_New(3); + char *path; + char *subfolder= ""; + + if (!PyArg_ParseTuple(args, "|s:blender_homes", &subfolder)) + return NULL; + + path= BLI_gethome_folder(subfolder, BLI_GETHOME_SYSTEM); + PyTuple_SET_ITEM(ret, 0, PyUnicode_FromString(path?path:"")); + + path= BLI_gethome_folder(subfolder, BLI_GETHOME_LOCAL); + PyTuple_SET_ITEM(ret, 1, PyUnicode_FromString(path?path:"")); + + path= BLI_gethome_folder(subfolder, BLI_GETHOME_USER); + PyTuple_SET_ITEM(ret, 2, PyUnicode_FromString(path?path:"")); + + return ret; +} + +static PyMethodDef meth_bpy_home_paths[] = {{ "home_paths", (PyCFunction)bpy_home_paths, METH_VARARGS, bpy_home_paths_doc}}; + +static void bpy_import_test(char *modname) +{ + PyObject *mod= PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0); + if(mod) { + Py_DECREF(mod); + } + else { + PyErr_Print(); + PyErr_Clear(); + } +} + +/***************************************************************************** +* Description: Creates the bpy module and adds it to sys.modules for importing +*****************************************************************************/ +void BPy_init_modules( void ) +{ + extern BPy_StructRNA *bpy_context_module; + PyObject *mod; + + /* Needs to be first since this dir is needed for future modules */ + char *modpath= BLI_gethome_folder("scripts/modules", BLI_GETHOME_ALL); + if(modpath) { + PyObject *sys_path= PySys_GetObject("path"); /* borrow */ + PyObject *py_modpath= PyUnicode_FromString(modpath); + PyList_Insert(sys_path, 0, py_modpath); /* add first */ + Py_DECREF(py_modpath); + } + + /* stand alone utility modules not related to blender directly */ + Geometry_Init(); + Mathutils_Init(); + BGL_Init(); + IDProp_Init_Types(); + + + mod = PyModule_New("_bpy"); + + /* add the module so we can import it */ + PyDict_SetItemString(PySys_GetObject("modules"), "_bpy", mod); + Py_DECREF(mod); + + /* run first, initializes rna types */ + BPY_rna_init(); + + PyModule_AddObject( mod, "types", BPY_rna_types() ); /* needs to be first so bpy_types can run */ + bpy_import_test("bpy_types"); + PyModule_AddObject( mod, "data", BPY_rna_module() ); /* imports bpy_types by running this */ + bpy_import_test("bpy_types"); + 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, "app", BPY_app_struct() ); + + /* bpy context */ + bpy_context_module= ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type ); + RNA_pointer_create(NULL, &RNA_Context, NULL, &bpy_context_module->ptr); + bpy_context_module->freeptr= 0; + PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module); + + /* utility func's that have nowhere else to go */ + PyModule_AddObject(mod, meth_bpy_home_paths->ml_name, (PyObject *)PyCFunction_New(meth_bpy_home_paths, NULL)); + + /* add our own modules dir, this is a python package */ + bpy_import_test("bpy"); +} diff --git a/source/blender/python/intern/bpy.h b/source/blender/python/intern/bpy.h new file mode 100644 index 00000000000..10bdc6a27df --- /dev/null +++ b/source/blender/python/intern/bpy.h @@ -0,0 +1,25 @@ +/** + * $Id: + * + * ***** 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. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** */ + +void BPy_init_modules( void ); +
\ No newline at end of file diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 133f380120a..b3a3c6c1915 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -38,10 +38,8 @@ #include "compile.h" /* for the PyCodeObject */ #include "eval.h" /* for PyEval_EvalCode */ -#include "bpy_app.h" +#include "bpy.h" #include "bpy_rna.h" -#include "bpy_props.h" -#include "bpy_operator.h" #include "bpy_util.h" #ifndef WIN32 @@ -55,10 +53,10 @@ #include "MEM_guardedalloc.h" -#include "BLI_path_util.h" #include "BLI_storage.h" #include "BLI_fileops.h" #include "BLI_string.h" +#include "BLI_path_util.h" #include "BKE_context.h" #include "BKE_text.h" @@ -68,18 +66,12 @@ #include "BPY_extern.h" #include "../generic/bpy_internal_import.h" // our own imports -/* external util modules */ - -#include "../generic/Mathutils.h" -#include "../generic/Geometry.h" -#include "../generic/BGL.h" -#include "../generic/IDProp.h" /* for internal use, when starting and ending python scripts */ /* incase a python script triggers another python call, stop bpy_context_clear from invalidating */ static int py_call_level= 0; - +BPy_StructRNA *bpy_context_module= NULL; /* for fast access */ // only for tests #define TIME_PY_RUN @@ -148,18 +140,6 @@ void bpy_context_clear(bContext *C, PyGILState_STATE *gilstate) } } -static void bpy_import_test(char *modname) -{ - PyObject *mod= PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0); - if(mod) { - Py_DECREF(mod); - } - else { - PyErr_Print(); - PyErr_Clear(); - } -} - void BPY_free_compiled_text( struct Text *text ) { if( text->compiled ) { @@ -168,62 +148,6 @@ void BPY_free_compiled_text( struct Text *text ) } } -/***************************************************************************** -* Description: Creates the bpy module and adds it to sys.modules for importing -*****************************************************************************/ -static BPy_StructRNA *bpy_context_module= NULL; /* for fast access */ -static void bpy_init_modules( void ) -{ - PyObject *mod; - - /* Needs to be first since this dir is needed for future modules */ - char *modpath= BLI_gethome_folder("scripts/modules", BLI_GETHOME_ALL); - if(modpath) { - PyObject *sys_path= PySys_GetObject("path"); /* borrow */ - PyObject *py_modpath= PyUnicode_FromString(modpath); - PyList_Insert(sys_path, 0, py_modpath); /* add first */ - Py_DECREF(py_modpath); - } - - /* stand alone utility modules not related to blender directly */ - Geometry_Init(); - Mathutils_Init(); - BGL_Init(); - IDProp_Init_Types(); - - - mod = PyModule_New("_bpy"); - - /* add the module so we can import it */ - PyDict_SetItemString(PySys_GetObject("modules"), "_bpy", mod); - Py_DECREF(mod); - - /* run first, initializes rna types */ - BPY_rna_init(); - - PyModule_AddObject( mod, "types", BPY_rna_types() ); /* needs to be first so bpy_types can run */ - bpy_import_test("bpy_types"); - PyModule_AddObject( mod, "data", BPY_rna_module() ); /* imports bpy_types by running this */ - 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, "app", BPY_app_struct() ); - - /* bpy context */ - { - bpy_context_module= ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type ); - - RNA_pointer_create(NULL, &RNA_Context, NULL, &bpy_context_module->ptr); - bpy_context_module->freeptr= 0; - - PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module); - } - - /* add our own modules dir, this is a python package */ - bpy_import_test("bpy"); -} - void BPY_update_modules( void ) { #if 0 // slow, this runs all the time poll, draw etc 100's of time a sec. @@ -357,7 +281,7 @@ void BPY_start_python( int argc, char **argv ) /* bpy.* and lets us import it */ - bpy_init_modules(); + BPy_init_modules(); { /* our own import and reload functions */ PyObject *item; |