[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17645] branches/blender2.5/blender/source /blender: PyRNA epydoc style docstrings.
Campbell Barton
ideasman42 at gmail.com
Sun Nov 30 15:00:15 CET 2008
Revision: 17645
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17645
Author: campbellbarton
Date: 2008-11-30 15:00:14 +0100 (Sun, 30 Nov 2008)
Log Message:
-----------
PyRNA epydoc style docstrings.
examples...
RNA Lamp: Lamp
==============
@ivar rna_type: RNA type definition. *readonly*
@type rna_type: PyRNA PointerProperty
@ivar name: Unique datablock ID name. (22 maximum length)
@type name: string
@ivar adapt_thresh: Threshold for Adaptive Sampling. in (0.000, 1.000)
@type adapt_thresh: float
@ivar area_shape: Shape of the Area lamp
@type area_shape: enum in [SQUARE, RECTANGLE]
@ivar area_size: Size of the area of the Area Lamp. in (0.000, 100.000)
@type area_size: float
@ivar area_sizey: Size of the area of the Area Lamp. in (0.000, 100.000)
@type area_sizey: float
- snip
RNA Object: Object
==================
@ivar rna_type: RNA type definition. *readonly*
@type rna_type: PyRNA PointerProperty
@ivar name: Unique datablock ID name. (22 maximum length)
@type name: string
@ivar data: Object data. *readonly*
@type data: PyRNA PointerProperty
@ivar fake_user: Saves this datablock even if it has no users
@type fake_user: bool
@ivar library: Library file the datablock is linked from. *readonly*
@type library: PyRNA PointerProperty
@ivar loc: in (-inf, inf)
@type loc: float[3]
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c 2008-11-30 13:25:59 UTC (rev 17644)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c 2008-11-30 14:00:14 UTC (rev 17645)
@@ -150,7 +150,7 @@
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, "ID", "name");
- RNA_def_property_ui_text(prop, "Name", "Object ID name.");
+ RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name.");
RNA_def_property_string_funcs(prop, "rna_ID_name_get", "rna_ID_name_length", "rna_ID_name_set");
RNA_def_property_string_maxlength(prop, 22);
RNA_def_struct_name_property(srna, prop);
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c 2008-11-30 13:25:59 UTC (rev 17644)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c 2008-11-30 14:00:14 UTC (rev 17645)
@@ -24,6 +24,8 @@
#include "bpy_rna.h"
#include "bpy_compat.h"
+//#include "blendef.h"
+#include "BLI_dynstr.h"
#include "MEM_guardedalloc.h"
#include "BKE_global.h" /* evil G.* */
@@ -528,14 +530,157 @@
( objobjargproc ) pyrna_prop_assign_subscript, /* mp_ass_subscript */
};
+
+PyObject *pyrna_struct_to_docstring(BPy_StructRNA *self)
+{
+ PyObject *ret;
+ PropertyRNA *prop;
+
+ DynStr *dynstr;
+ const char *identifier;
+ const char *desc;
+ char *readonly;
+ char *result;
+ int len;
+ int i; /* general iter */
+
+ dynstr= BLI_dynstr_new();
+ BLI_dynstr_appendf(dynstr, "RNA %s: %s\n", RNA_struct_identifier(&self->ptr), RNA_struct_ui_name(&self->ptr));
+
+ /* Add EPI ===='s */
+ i = BLI_dynstr_get_len(dynstr);
+ while (--i)
+ BLI_dynstr_append(dynstr, "=");
+
+ BLI_dynstr_append(dynstr, "\n");
+ /* done */
+
+ {
+ PropertyRNA *iterprop;
+ CollectionPropertyIterator iter;
+
+ iterprop= RNA_struct_iterator_property(&self->ptr);
+ RNA_property_collection_begin(&self->ptr, iterprop, &iter);
+
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ prop = iter.ptr.data;
+ identifier = RNA_property_identifier(&iter.ptr, prop);
+ desc = RNA_property_ui_description(&iter.ptr, prop);
+
+ readonly = (RNA_property_editable(&self->ptr, prop)) ? "" : " *readonly*";
+ len = RNA_property_array_length(&iter.ptr, prop);
+
+ switch(RNA_property_type(&iter.ptr, prop)) {
+ case PROP_BOOLEAN:
+ {
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s%s\n", identifier, desc, readonly);
+
+ if (len==0) BLI_dynstr_appendf(dynstr, "@type %s: bool\n", identifier);
+ else BLI_dynstr_appendf(dynstr, "@type %s: bool[%d]\n", identifier, len);
+ break;
+ }
+ case PROP_INT:
+ {
+ int hardmin, hardmax;
+ RNA_property_int_range(&iter.ptr, prop, &hardmin, &hardmax);
+
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s in (%d, %d)%s\n", identifier, desc, hardmin, hardmax, readonly);
+
+ if (len==0) BLI_dynstr_appendf(dynstr, "@type %s: int\n", identifier);
+ else BLI_dynstr_appendf(dynstr, "@type %s: int[%d]\n", identifier, len);
+ break;
+ }
+ case PROP_FLOAT:
+ {
+ float hardmin, hardmax;
+ RNA_property_float_range(&iter.ptr, prop, &hardmin, &hardmax);
+
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s in (", identifier, desc);
+
+ if (hardmin < -9999999) BLI_dynstr_append(dynstr, "-inf, ");
+ else BLI_dynstr_appendf(dynstr, "%.3f, ", hardmin);
+
+ if (hardmax > 9999999) BLI_dynstr_append(dynstr, "inf");
+ else BLI_dynstr_appendf(dynstr, "%.3f", hardmax);
+
+ BLI_dynstr_appendf(dynstr, ")%s\n", readonly);
+
+
+ if (len==0) BLI_dynstr_appendf(dynstr, "@type %s: float\n", identifier);
+ else BLI_dynstr_appendf(dynstr, "@type %s: float[%d]\n", identifier, len);
+ break;
+ }
+ case PROP_STRING:
+ {
+ int maxlen = RNA_property_string_maxlength(&iter.ptr, prop);
+
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s (%d maximum length)%s\n", identifier, desc, maxlen, readonly);
+ BLI_dynstr_appendf(dynstr, "@type %s: string\n", identifier);
+ break;
+ }
+ case PROP_ENUM:
+ {
+ const EnumPropertyItem *item;
+ int totitem;
+
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s%s\n", identifier, desc, readonly);
+
+ BLI_dynstr_appendf(dynstr, "@type %s: enum in [", identifier);
+
+ RNA_property_enum_items(&iter.ptr, prop, &item, &totitem);
+
+ for (i=0; i<totitem; i++) {
+ BLI_dynstr_append(dynstr, item[i].identifier);
+ if (i<totitem-1) {
+ BLI_dynstr_append(dynstr, ", ");
+ }
+ }
+
+ BLI_dynstr_append(dynstr, "]\n");
+ break;
+ }
+ case PROP_POINTER:
+ {
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s%s\n", identifier, desc, readonly);
+
+ // TODO - why does this crash sometimes
+ // PointerRNA newptr;
+ // RNA_property_pointer_get(&iter.ptr, prop, &newptr);
+
+ // Use this instead, its not that useful
+ BLI_dynstr_appendf(dynstr, "@type %s: PyRNA %s\n", identifier, RNA_struct_identifier(&iter.ptr));
+ break;
+ }
+ case PROP_COLLECTION:
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s%s\n", identifier, desc, readonly);
+ BLI_dynstr_appendf(dynstr, "@type %s: PyRNA Collection\n", identifier);
+ break;
+ default:
+ BLI_dynstr_appendf(dynstr, "@ivar %s: %s%s\n", identifier, desc, readonly);
+ BLI_dynstr_appendf(dynstr, "@type %s: <unknown>\n", identifier);
+ break;
+ }
+ }
+
+ RNA_property_collection_end(&iter);
+ }
+
+ result= BLI_dynstr_get_cstring(dynstr);
+ BLI_dynstr_free(dynstr);
+
+ ret = PyUnicode_FromString(result);
+ MEM_freeN(result);
+
+ return ret;
+}
+
+
//---------------getattr--------------------------------------------
static PyObject *pyrna_struct_getattr( BPy_StructRNA * self, char *name )
{
PyObject *ret;
PropertyRNA *prop;
-
-
if( strcmp( name, "__members__" ) == 0 ) {
PyObject *item;
@@ -549,12 +694,15 @@
for(; iter.valid; RNA_property_collection_next(&iter)) {
- item = PyUnicode_FromString( RNA_property_identifier(&iter.ptr, iter.ptr.data) ); /* iter.ptr.data is just a prop */
+ prop = iter.ptr.data;
+ item = PyUnicode_FromString( RNA_property_identifier(&iter.ptr, prop) );
PyList_Append(ret, item);
Py_DECREF(item);
}
RNA_property_collection_end(&iter);
+ } else if ( strcmp( name, "__doc__" ) == 0 ) {
+ ret = pyrna_struct_to_docstring(self);
} else {
prop = RNA_struct_find_property(&self->ptr, name);
@@ -588,7 +736,6 @@
return pyrna_py_to_prop(&self->ptr, prop, value);
}
-
PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
{
PyObject *ret;
@@ -803,7 +950,7 @@
/* methods */
NULL, /* tp_dealloc */
NULL, /* printfunc tp_print; */
- NULL, /* getattrfunc tp_getattr; */ /* NOTE - adding getattr here will override pyrna_prop_methods*/
+ NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
( cmpfunc ) pyrna_prop_compare, /* tp_compare */
( reprfunc ) pyrna_prop_repr, /* tp_repr */
More information about the Bf-blender-cvs
mailing list