[Bf-blender-cvs] [fcff401] ui-preview-buttons: Use regular module for bpy.app._previews

Campbell Barton noreply at git.blender.org
Tue May 5 11:08:04 CEST 2015


Commit: fcff4017db721d74fbcf4052475e6d0602849e0b
Author: Campbell Barton
Date:   Tue May 5 19:06:24 2015 +1000
Branches: ui-preview-buttons
https://developer.blender.org/rBfcff4017db721d74fbcf4052475e6d0602849e0b

Use regular module for bpy.app._previews

Since this is a collection of API calls, theres no need to define a custom type.

===================================================================

M	source/blender/python/intern/bpy_app.c
M	source/blender/python/intern/bpy_app_previews.c
M	source/blender/python/intern/bpy_app_previews.h

===================================================================

diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c
index 8e6d8bf..dc7f21a 100644
--- a/source/blender/python/intern/bpy_app.c
+++ b/source/blender/python/intern/bpy_app.c
@@ -104,7 +104,7 @@ static PyStructSequence_Field app_info_fields[] = {
 	{(char *)"build_options", (char *)"A set containing most important enabled optional build features"},
 	{(char *)"handlers", (char *)"Application handler callbacks"},
 	{(char *)"translations", (char *)"Application and addons internationalization API"},
-    {(char *)"_previews", (char *)"Previews manager API"},
+	{(char *)"_previews", (char *)"Previews manager API"},
 	{NULL},
 };
 
@@ -182,7 +182,7 @@ static PyObject *make_app_info(void)
 	SetObjItem(BPY_app_build_options_struct());
 	SetObjItem(BPY_app_handlers_struct());
 	SetObjItem(BPY_app_translations_struct());
-	SetObjItem(BPY_app_previews_struct());
+	SetObjItem(BPY_app_preview_module());
 
 #undef SetIntItem
 #undef SetStrItem
diff --git a/source/blender/python/intern/bpy_app_previews.c b/source/blender/python/intern/bpy_app_previews.c
index 6e4f2b1..12a0777 100644
--- a/source/blender/python/intern/bpy_app_previews.c
+++ b/source/blender/python/intern/bpy_app_previews.c
@@ -53,15 +53,6 @@
 
 #include "../generic/python_utildefines.h"
 
-
-/* Empty container... */
-typedef struct {
-	PyObject_HEAD
-} BlenderAppPreviews;
-
-/* Our singleton instance pointer */
-static BlenderAppPreviews *_previews = NULL;
-
 PyDoc_STRVAR(app_previews_meth_new_doc,
 ".. method:: new(name)\n"
 "\n"
@@ -172,127 +163,34 @@ static PyObject *app_previews_meth_release(PyObject *UNUSED(self), PyObject *arg
 	Py_RETURN_NONE;
 }
 
-
-static PyMethodDef app_previews_methods[] = {
+static struct PyMethodDef bpy_app_previews_methods[] = {
 	/* Can't use METH_KEYWORDS alone, see http://bugs.python.org/issue11587 */
-	{"new", (PyCFunction)app_previews_meth_new, METH_VARARGS | METH_KEYWORDS | METH_STATIC, app_previews_meth_new_doc},
-	{"load", (PyCFunction)app_previews_meth_load, METH_VARARGS | METH_KEYWORDS | METH_STATIC,
-             app_previews_meth_load_doc},
-	{"release", (PyCFunction)app_previews_meth_release, METH_VARARGS | METH_KEYWORDS | METH_STATIC,
-	            app_previews_meth_release_doc},
-	{NULL}
+	{"new", (PyCFunction)app_previews_meth_new, METH_VARARGS | METH_KEYWORDS, app_previews_meth_new_doc},
+	{"load", (PyCFunction)app_previews_meth_load, METH_VARARGS | METH_KEYWORDS, app_previews_meth_load_doc},
+	{"release", (PyCFunction)app_previews_meth_release, METH_VARARGS | METH_KEYWORDS, app_previews_meth_release_doc},
+	{NULL, NULL, 0, NULL}
 };
 
-static PyObject *app_previews_new(PyTypeObject *type, PyObject *UNUSED(args), PyObject *UNUSED(kw))
-{
-	if (_previews == NULL) {
-		_previews = (BlenderAppPreviews *)type->tp_alloc(type, 0);
-	}
-
-	return (PyObject *)_previews;
-}
-
-static void app_previews_free(void *obj)
-{
-	PyObject_Del(obj);
-	_previews = NULL;
-}
-
-PyDoc_STRVAR(app_previews_doc,
+PyDoc_STRVAR(bpy_app_previews_doc,
 "This object contains basic static methods to handle cached (non-ID) previews in Blender (low-level API, \n"
 "not exposed to final users).\n"
 "\n"
 );
-static PyTypeObject BlenderAppPreviewsType = {
-	PyVarObject_HEAD_INIT(NULL, 0)
-	                            /* tp_name */
-	"bpy.app._previews_type",
-	sizeof(BlenderAppPreviews), /* tp_basicsize */
-	0,                          /* tp_itemsize */
-	/* methods */
-	/* No destructor, this is a singleton! */
-	NULL,                       /* tp_dealloc */
-	NULL,                       /* printfunc tp_print; */
-	NULL,                       /* getattrfunc tp_getattr; */
-	NULL,                       /* setattrfunc tp_setattr; */
-	NULL,                       /* tp_compare */ /* DEPRECATED in python 3.0! */
-	NULL,                       /* tp_repr */
-
-	/* Method suites for standard classes */
-	NULL,                       /* PyNumberMethods *tp_as_number; */
-	NULL,                       /* PySequenceMethods *tp_as_sequence; */
-	NULL,                       /* PyMappingMethods *tp_as_mapping; */
-
-	/* More standard operations (here for binary compatibility) */
-	(hashfunc)_Py_HashPointer,  /* hashfunc tp_hash; */  /* without this we can't do set(sys.modules), T29635 */
-	NULL,                       /* ternaryfunc tp_call; */
-	NULL,                       /* reprfunc tp_str; */
-	NULL,                       /* getattrofunc tp_getattro; */
-	NULL,                       /* setattrofunc tp_setattro; */
-
-	/* Functions to access object as input/output buffer */
-	NULL,                       /* PyBufferProcs *tp_as_buffer; */
-
-	/*** Flags to define presence of optional/expanded features ***/
-	Py_TPFLAGS_DEFAULT,         /* long tp_flags; */
-
-	app_previews_doc,           /* char *tp_doc;  Documentation string */
-
-	/*** Assigned meaning in release 2.0 ***/
-	/* call function for all accessible objects */
-	NULL,                       /* traverseproc tp_traverse; */
-
-	/* delete references to contained objects */
-	NULL,                       /* inquiry tp_clear; */
-
-	/***  Assigned meaning in release 2.1 ***/
-	/*** rich comparisons ***/
-	NULL,                       /* richcmpfunc tp_richcompare; */
-
-	/***  weak reference enabler ***/
-	0,                          /* long tp_weaklistoffset */
-
-	/*** Added in release 2.2 ***/
-	/*   Iterators */
-	NULL,                       /* getiterfunc tp_iter; */
-	NULL,                       /* iternextfunc tp_iternext; */
-
-	/*** Attribute descriptor and subclassing stuff ***/
-	app_previews_methods,       /* struct PyMethodDef *tp_methods; */
-	NULL,                       /* struct PyMemberDef *tp_members; */
-	NULL,                       /* struct PyGetSetDef *tp_getset; */
-	NULL,                       /* struct _typeobject *tp_base; */
-	NULL,                       /* PyObject *tp_dict; */
-	NULL,                       /* descrgetfunc tp_descr_get; */
-	NULL,                       /* descrsetfunc tp_descr_set; */
-	0,                          /* long tp_dictoffset; */
-	NULL,                       /* initproc tp_init; */
-	NULL,                       /* allocfunc tp_alloc; */
-	(newfunc)app_previews_new,  /* newfunc tp_new; */
-	/*  Low-level free-memory routine */
-	app_previews_free,          /* freefunc tp_free;  */
-	/* For PyObject_IS_GC */
-	NULL,                       /* inquiry tp_is_gc;  */
-	NULL,                       /* PyObject *tp_bases; */
-	/* method resolution order */
-	NULL,                       /* PyObject *tp_mro;  */
-	NULL,                       /* PyObject *tp_cache; */
-	NULL,                       /* PyObject *tp_subclasses; */
-	NULL,                       /* PyObject *tp_weaklist; */
-	NULL
+static struct PyModuleDef bpy_app_previews_module = {
+	PyModuleDef_HEAD_INIT,
+	"bpy.app._previews",
+	bpy_app_previews_doc,
+	0,
+	bpy_app_previews_methods,
+	NULL, NULL, NULL, NULL
 };
 
-PyObject *BPY_app_previews_struct(void)
-{
-	PyObject *ret;
-
-	if (PyType_Ready(&BlenderAppPreviewsType) < 0)
-		return NULL;
 
-	ret = PyObject_CallObject((PyObject *)&BlenderAppPreviewsType, NULL);
+PyObject *BPY_app_preview_module(void)
+{
+	PyObject *submodule;
 
-	/* prevent user from creating new instances */
-	BlenderAppPreviewsType.tp_new = NULL;
+	submodule = PyModule_Create(&bpy_app_previews_module);
 
-	return ret;
+	return submodule;
 }
diff --git a/source/blender/python/intern/bpy_app_previews.h b/source/blender/python/intern/bpy_app_previews.h
index a49520d..c3fd422 100644
--- a/source/blender/python/intern/bpy_app_previews.h
+++ b/source/blender/python/intern/bpy_app_previews.h
@@ -27,7 +27,6 @@
 #ifndef __BPY_APP_PREVIEWS_H__
 #define __BPY_APP_PREVIEWS_H__
 
-PyObject *BPY_app_previews_struct(void);
-void      BPY_app_previews_end(void);
+PyObject *BPY_app_preview_module(void);
 
 #endif /* __BPY_APP_PREVIEWS_H__ */




More information about the Bf-blender-cvs mailing list