repr() functions for the python api, this means it can print 'bpy.data.objects[foo].modifiers' from the objects modifiers, uses the same function thats used to make the animation path.
This commit is contained in:
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "MEM_guardedalloc.h"
|
#include "MEM_guardedalloc.h"
|
||||||
#include "BKE_utildefines.h"
|
#include "BKE_utildefines.h"
|
||||||
|
#include "BKE_idcode.h"
|
||||||
#include "BKE_context.h"
|
#include "BKE_context.h"
|
||||||
#include "BKE_global.h" /* evil G.* */
|
#include "BKE_global.h" /* evil G.* */
|
||||||
#include "BKE_report.h"
|
#include "BKE_report.h"
|
||||||
@@ -418,25 +419,50 @@ static PyObject *pyrna_prop_richcmp(PyObject *a, PyObject *b, int op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------repr--------------------------------------------*/
|
/*----------------------repr--------------------------------------------*/
|
||||||
static PyObject *pyrna_struct_repr( BPy_StructRNA *self )
|
static PyObject *pyrna_struct_str( BPy_StructRNA *self )
|
||||||
{
|
{
|
||||||
PyObject *pyob;
|
PyObject *ret;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
/* print name if available */
|
/* print name if available */
|
||||||
name= RNA_struct_name_get_alloc(&self->ptr, NULL, FALSE);
|
name= RNA_struct_name_get_alloc(&self->ptr, NULL, FALSE);
|
||||||
if(name) {
|
if(name) {
|
||||||
pyob= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
|
ret= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
|
||||||
MEM_freeN(name);
|
MEM_freeN(name);
|
||||||
return pyob;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PyUnicode_FromFormat( "<bpy_struct, %.200s at %p>", RNA_struct_identifier(self->ptr.type), self->ptr.data);
|
return PyUnicode_FromFormat( "<bpy_struct, %.200s at %p>", RNA_struct_identifier(self->ptr.type), self->ptr.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
|
static PyObject *pyrna_struct_repr(BPy_StructRNA *self)
|
||||||
{
|
{
|
||||||
PyObject *pyob;
|
ID *id= self->ptr.id.data;
|
||||||
|
if(id == NULL)
|
||||||
|
return pyrna_struct_str(self); /* fallback */
|
||||||
|
|
||||||
|
if(RNA_struct_is_ID(self->ptr.type)) {
|
||||||
|
return PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PyObject *ret;
|
||||||
|
char *path;
|
||||||
|
path= RNA_path_from_ID_to_struct(&self->ptr);
|
||||||
|
if(path) {
|
||||||
|
ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
|
||||||
|
MEM_freeN(path);
|
||||||
|
}
|
||||||
|
else { /* cant find, print something sane */
|
||||||
|
ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_struct_identifier(self->ptr.type));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *pyrna_prop_str( BPy_PropertyRNA *self )
|
||||||
|
{
|
||||||
|
PyObject *ret;
|
||||||
PointerRNA ptr;
|
PointerRNA ptr;
|
||||||
char *name;
|
char *name;
|
||||||
const char *type_id= NULL;
|
const char *type_id= NULL;
|
||||||
@@ -470,15 +496,36 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
|
|||||||
name= RNA_struct_name_get_alloc(&ptr, NULL, FALSE);
|
name= RNA_struct_name_get_alloc(&ptr, NULL, FALSE);
|
||||||
|
|
||||||
if(name) {
|
if(name) {
|
||||||
pyob= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
|
ret= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
|
||||||
MEM_freeN(name);
|
MEM_freeN(name);
|
||||||
return pyob;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
|
return PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *pyrna_prop_repr(BPy_PropertyRNA *self)
|
||||||
|
{
|
||||||
|
ID *id= self->ptr.id.data;
|
||||||
|
PyObject *ret;
|
||||||
|
char *path;
|
||||||
|
|
||||||
|
if(id == NULL)
|
||||||
|
return pyrna_prop_str(self); /* fallback */
|
||||||
|
|
||||||
|
path= RNA_path_from_ID_to_property(&self->ptr, self->prop);
|
||||||
|
if(path) {
|
||||||
|
ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
|
||||||
|
MEM_freeN(path);
|
||||||
|
}
|
||||||
|
else { /* cant find, print something sane */
|
||||||
|
ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_property_identifier(self->prop));
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static long pyrna_struct_hash( BPy_StructRNA *self )
|
static long pyrna_struct_hash( BPy_StructRNA *self )
|
||||||
{
|
{
|
||||||
return _Py_HashPointer(self->ptr.data);
|
return _Py_HashPointer(self->ptr.data);
|
||||||
@@ -3530,7 +3577,7 @@ PyTypeObject pyrna_struct_Type = {
|
|||||||
|
|
||||||
( hashfunc )pyrna_struct_hash, /* hashfunc tp_hash; */
|
( hashfunc )pyrna_struct_hash, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
(reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
|
||||||
( getattrofunc ) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
( getattrofunc ) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
||||||
( setattrofunc ) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
( setattrofunc ) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
@@ -3597,7 +3644,7 @@ PyTypeObject pyrna_prop_Type = {
|
|||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
( reprfunc ) pyrna_prop_repr, /* tp_repr */
|
(reprfunc) pyrna_prop_repr, /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
@@ -3609,7 +3656,7 @@ PyTypeObject pyrna_prop_Type = {
|
|||||||
|
|
||||||
( hashfunc ) pyrna_prop_hash, /* hashfunc tp_hash; */
|
( hashfunc ) pyrna_prop_hash, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
(reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
NULL, /* getattrofunc tp_getattro; */
|
NULL, /* getattrofunc tp_getattro; */
|
||||||
|
|||||||
Reference in New Issue
Block a user