python api:
- bpy.app.debug can now be set, removed bpy.data.debug (since this is not blendfile data) - added bpy.app.tempdir, this is needed because the userpref temp dir isn't always set, $TEMP may be used instead and scripts need temp dir access.
This commit is contained in:
@@ -44,7 +44,6 @@ static PyStructSequence_Field app_info_fields[] = {
|
||||
{"version", "The Blender version as a tuple of 3 numbers. eg. (2, 50, 11)"},
|
||||
{"version_string", "The Blender version formatted as a string"},
|
||||
{"binary_path", "The location of blenders executable, useful for utilities that spawn new instances"},
|
||||
{"debug", "Boolean, set when blender is running in debug mode (started with -d)"},
|
||||
{"background", "Boolean, True when blender is running without a user interface (started with -b)"},
|
||||
|
||||
/* buildinfo */
|
||||
@@ -85,7 +84,6 @@ static PyObject *make_app_info(void)
|
||||
SetObjItem(Py_BuildValue("(iii)", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION));
|
||||
SetObjItem(PyUnicode_FromFormat("%d.%02d (sub %d)", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION));
|
||||
SetStrItem(bprogname);
|
||||
SetObjItem(PyBool_FromLong(G.f & G_DEBUG));
|
||||
SetObjItem(PyBool_FromLong(G.background));
|
||||
|
||||
/* build info */
|
||||
@@ -96,11 +94,11 @@ static PyObject *make_app_info(void)
|
||||
SetStrItem(build_platform);
|
||||
SetStrItem(build_type);
|
||||
#else
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
SetStrItem("Unknown");
|
||||
#endif
|
||||
|
||||
#undef SetIntItem
|
||||
@@ -114,10 +112,60 @@ static PyObject *make_app_info(void)
|
||||
return app_info;
|
||||
}
|
||||
|
||||
/* a few getsets because it makes sense for them to be in bpy.app even though
|
||||
* they are not static */
|
||||
static PyObject *bpy_app_debug_get(PyObject *self, void *closure)
|
||||
{
|
||||
(void)(self);
|
||||
(void)(closure);
|
||||
|
||||
return PyBool_FromLong(G.f & G_DEBUG);
|
||||
}
|
||||
|
||||
static int bpy_app_debug_set(PyObject *self, PyObject *value, void *closure)
|
||||
{
|
||||
int param= PyObject_IsTrue(value);
|
||||
|
||||
(void)(self);
|
||||
(void)(closure);
|
||||
|
||||
if(param < 0) {
|
||||
PyErr_SetString(PyExc_TypeError, "bpy.app.debug can only be True/False");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(param) G.f |= G_DEBUG;
|
||||
else G.f &= ~G_DEBUG;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *bpy_app_tempdir_get(PyObject *self, void *closure)
|
||||
{
|
||||
extern char btempdir[];
|
||||
(void)(self);
|
||||
(void)(closure);
|
||||
|
||||
return PyUnicode_FromString(btempdir);
|
||||
}
|
||||
|
||||
PyGetSetDef bpy_app_debug_getset= {"debug", bpy_app_debug_get, bpy_app_debug_set, "Boolean, set when blender is running in debug mode (started with -d)", NULL};
|
||||
PyGetSetDef bpy_app_tempdir_getset= {"tempdir", bpy_app_tempdir_get, NULL, "String, the temp directory used by blender (read-only)", NULL};
|
||||
|
||||
static void py_struct_seq_getset_init(void)
|
||||
{
|
||||
/* tricky dynamic members, not to py-spec! */
|
||||
|
||||
PyDict_SetItemString(BlenderAppType.tp_dict, bpy_app_debug_getset.name, PyDescr_NewGetSet(&BlenderAppType, &bpy_app_debug_getset));
|
||||
PyDict_SetItemString(BlenderAppType.tp_dict, bpy_app_tempdir_getset.name, PyDescr_NewGetSet(&BlenderAppType, &bpy_app_tempdir_getset));
|
||||
}
|
||||
/* end dynamic bpy.app */
|
||||
|
||||
|
||||
PyObject *BPY_app_struct(void)
|
||||
{
|
||||
PyObject *ret;
|
||||
|
||||
|
||||
PyStructSequence_InitType(&BlenderAppType, &app_info_desc);
|
||||
|
||||
ret= make_app_info();
|
||||
@@ -125,6 +173,10 @@ PyObject *BPY_app_struct(void)
|
||||
/* prevent user from creating new instances */
|
||||
BlenderAppType.tp_init = NULL;
|
||||
BlenderAppType.tp_new = NULL;
|
||||
|
||||
|
||||
/* kindof a hack ontop of PyStructSequence */
|
||||
py_struct_seq_getset_init();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user