I tried create_instance event and it fires, now having:
def see_what_type(mapper, context, row, class_):
if **is_air**:
return Air()
else:
return EXT_CONTINUE
def initialize_sql(engine):
...
layer_mapper = mapper(Layer, layers)
mapper(Air, inherits=layer_mapper)
...
event.listen(Layer, 'create_instance', see_what_type,
retval=True)
and setting **is_air** as True I get Air instances querying for Layer with
filled attributes and relationships.
I don't know about other caveats...
Now I have to find a robust way to check id_type (one of `row` items) in
see_what_type.
Any advice?
Thanks for your support
On Fri, Jul 29, 2011 at 12:15 AM, Michael Bayer <[email protected]>wrote:
>
> On Jul 28, 2011, at 6:08 PM, neurino wrote:
>
> Thanks Michael,
>
> my need is quite easy, no need of complex querying.
>
> Simply my class represents a Layer and, while quite all layer types
> (concrete, wood, bricks, etc.) act the same, only one (air) acts in a
> completely different way.
>
> With "act" I refer to performing calculations on float attributes, no more.
>
> So I can simply put in all calc functions separate operations:
>
> if self.type == air:
> #air calcs
> else:
> #all others calcs
>
> or, in a more elegant way, use a Layer subclass named Air.
>
> I can't create subclasses for all other layers since I don't know them in
> advance.
>
> As far as I understand I have to go with first solution at the moment,
> right?
>
>
> probably, there's an old event for this called create_instance (1) that was
> meant for this a long time ago but I don't know what kinds of caveats it has
> with modern usage. polymorphic_on=callable is ticket #1131 (2), note it is
> very old and the code examples there are out of date.
>
>
> 1:
> http://www.sqlalchemy.org/docs/orm/events.html#sqlalchemy.orm.events.MapperEvents.create_instance
> 2: http://www.sqlalchemy.org/trac/ticket/1131
>
>
>
>
> On Thu, Jul 28, 2011 at 11:38 PM, Michael Bayer
> <[email protected]>wrote:
>
>> column_property()
>
>
>
> --
> 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.
>
>
> --
> 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.
>
--
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.