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 */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs