On Wednesday 10 December 2008 00:42:14 Michael Bayer wrote: > On Dec 9, 2008, at 4:09 PM, Angri wrote: > > particularly > > explicitly define class properties (inheritable class > > properties!) > > if you'd like to submit a patch which defines __visit_name__ for > all ClauseElements and removes the logic from VisitableType to > guess the name, it will be accepted. The second half of > VisitableType still may be needed since it improves performance. > > > instead of doing things like eval("Annotated%s" % > > element.__class__.__name__)? > > The __name__ based logic is gone. > > The code that used to be there, which is the code i was mentioning, > was this: > > return object.__new__( > type.__new__(type, "Annotated%s" % > element.__class__.__name__, (Annotated, element.__class__), {}) > ) > > This generates a new type dynamically and is the preferred way to > do this. The __name__ is only used there to give the resultling > class a name and not any kind of lookup semantics. > > Unfortunately the resulting class is not pickleable since it is not > declared in the module. So there are two options I'm aware of. > Either do this: > > > class AnnotatedClauseElement(Annotated, ClauseElement): > .... > > class AnnotatedFromClause(Annotated, FromClause): > ... > > class AnnotatedColumnElement(Annotated, ColumnElement): > ... > > < continue for 100 more classes in sqlalchemy.expression> > > Or do the "Exec" thing we have. A third alternative would be great > if you have one in mind.
one can inject things in module's locals() via locals().update( ...) but i'm not sure if this is a feature-to-stay. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---