using a class there which replaces itself means you've developed a custom 
creational pattern.  A less hacky approach would be to subclass 
DeclarativeMeta, and just pass it to your Base:

from sqlalchemy.ext.declarative import DeclarativeMeta

class TefnetMeta(DeclarativeMeta):
    def __init__(cls, classname, bases, dict_):
        for key, value in dict_.items():
            if isinstance(value, TefProperty):
                dict_[key] = value._config(cls, key)
        super(TefnetMeta, cls).__init__(classname, bases, dict_)

Base = declarative_base(metaclass=TefnetMeta)



On Sep 21, 2012, at 10:17 AM, Tefnet Developers wrote:

> My example is just the shortest code I could come up with to show a problem, 
> but in production it doesn't look like this.
> We're using class inheritance, metaclass features etc, so changing it to 
> function is not an option for us :|
> 
> 
> W dniu 21.09.2012 15:59, Michael Bayer pisze:
>> my immediate thought on that code is to replace TefProperty with a function, 
>> since you are discarding TefProperty in any case:
>> 
>> 
>> def propInt():
>>     return sa.Column(key, Integer)
>> 
>> not sure how the previous Extension version of the code did this 
>> differently, this is really a class creational pattern.
>> 
>> 
>> 
>> On Sep 21, 2012, at 2:59 AM, Tefnet Developers wrote:
>> 
>>> Hi,
>>> we are trying to migrate our old *Extension based SQLA code to new - event 
>>> based.
>>> We also have class based properties that we want to keep. With old SQLA we 
>>> have had to monkey-patch _as_declarative function to populate our 
>>> properties. I wonder if it is possible to avoid doing it with events? The 
>>> only close one we found is "mapper_configured", but I'm afraid it is 
>>> executed too late. Anyway... I've prepared some short example code. If you 
>>> could take a look and advise if/how it can be done...
>>> 
>>> To check out where is the problem change USE_EVENT value from True to False.
>>> https://gist.github.com/3757273
>>> 
>>> Regards,
>>> Tomasz Jezierski
>>> Tefnet
>>> 
>>> -- 
>>> 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 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> 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 sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> 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 sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to