On Dec 29, 2012, at 5:45 PM, Michael Bayer wrote:
>
> On Dec 29, 2012, at 3:03 AM, Gerald Thibault wrote:
>
>> I'll post a test case later if needed, but this is more of a technical
>> question so i don't think it will be needed.
>>
>> When i use iterate_properties on a class with a hybrid_property, it's not
>> shown in the list. I am trying to 'extract' fields from classes in order to
>> automatically build forms from them. iterate_properties was useful for
>> getting most info, but eventually i had to start using 'for k in dir(class)'
>> to get access to association proxies on the classes. I would use
>> getattr(cls, k) to get the object, but for hybrid properties this calls
>> fget, and directly returns a BinaryExpression, rather than the property
>> itself. The only way I can find to access the actual hybrid_property object
>> is via vars(cls), and then, this doesn't contain hybrid properties defined
>> on the bases which are being used by the class.
>>
>> Is there a way built into sqlalchemy to get all hybrid_property objects for
>> a class, both those declared on the active class and those declared on the
>> base classes? I'm mainly interested in determining whether a setter has been
>> provided on the property, to determine if it's readonly or not.
>
>
> There's no API system of reading non-MapperProperty objects, which includes
> all the various descriptors we have in sqlalchemy.ext. It might be nice
> to add such an API to do so and make this an extension of the 0.8 inspect()
> system, but anyway for now when you read class-bound descriptors like this,
> you have to work around the fact that they have classbound behavior, which
> means you can't use getattr().
I've added this feature to the tip for 0.8.0:
from sqlalchemy import inspect
insp = inspect(MyClass) # note this is just the Mapper, as usual
for k, v in insp.all_orm_descriptors:
if v.extension_type is associationproxy.ASSOCIATION_PROXY:
# ...
elif v.extension_type is hybrid.HYBRID_PROPERTY
# ...
# etc.
see
http://docs.sqlalchemy.org/en/latest/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.all_orm_descriptors
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.