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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-02-11 17:08:22 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-02-11 17:08:22 +0300
commit8f4c340915fbfc65f9380b9a8561ed877c7dab87 (patch)
treefaff718fe726b2a4cb3dee1cd93e58e0ba4a94e0 /source
parenta2b94de5397f3a259c4244379b7fa89e57769d82 (diff)
bpy.utils.home_paths, use this to get script paths for the user/local/system blender paths.
Diffstat (limited to 'source')
-rw-r--r--source/blender/python/generic/IDProp.h12
-rw-r--r--source/blender/python/intern/bpy.c133
-rw-r--r--source/blender/python/intern/bpy.h25
-rw-r--r--source/blender/python/intern/bpy_interface.c84
4 files changed, 168 insertions, 86 deletions
diff --git a/source/blender/python/generic/IDProp.h b/source/blender/python/generic/IDProp.h
index 044abf82329..a431ce75de6 100644
--- a/source/blender/python/generic/IDProp.h
+++ b/source/blender/python/generic/IDProp.h
@@ -49,14 +49,14 @@ typedef struct BPy_IDGroup_Iter {
} BPy_IDGroup_Iter;
PyObject *BPy_Wrap_IDProperty(struct ID *id, struct IDProperty *prop, struct IDProperty *parent);
-PyObject *BPy_Wrap_GetKeys(IDProperty *prop);
-PyObject *BPy_Wrap_GetValues(ID *id, IDProperty *prop);
-PyObject *BPy_Wrap_GetItems(ID *id, IDProperty *prop);
-int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val);
+PyObject *BPy_Wrap_GetKeys(struct IDProperty *prop);
+PyObject *BPy_Wrap_GetValues(struct ID *id, struct IDProperty *prop);
+PyObject *BPy_Wrap_GetItems(struct ID *id, struct IDProperty *prop);
+int BPy_Wrap_SetMapItem(struct IDProperty *prop, PyObject *key, PyObject *val);
-PyObject *BPy_IDGroup_WrapData( ID *id, IDProperty *prop );
-char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObject *ob);
+PyObject *BPy_IDGroup_WrapData(struct ID *id, struct IDProperty *prop );
+char *BPy_IDProperty_Map_ValidateAndCreate(char *name, struct IDProperty *group, PyObject *ob);
void IDProp_Init_Types(void);
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;