https://bitbucket.org/zzzeek/sqlalchemy/issues/4221/non-mapped-declared_attr-warning-gets-in

but the warning is safe to ignore in any case

On Wed, Mar 21, 2018 at 9:44 AM, Mike Bayer <mike...@zzzcomputing.com> wrote:
> On Wed, Mar 21, 2018 at 12:07 AM, Russell Warren <r...@perspexis.com> wrote:
>> I'm having trouble with SQLAlchemy throwing the warning "Unmanaged access of
>> declarative attribute" when I try and inherit `__table_args__` with
>> declarative.
>
> this is not a covered use case.
>
> Looking at the commit for that warning, it's not clear this is coming
> from a specific user case that was reported, just that normally a
> @declared_attr is not supposed to be accessed outside of setting up a
> mapping, and the _sa_declared_attr_reg is in fact designed to only be
> present within the declarative mapping process, to hold onto the value
> of the declared attr so that we dont call it more than once.
>
> Basically there have been cases in the past where some declarative
> setup returns a Column object, then they do meaningful things with
> that Column (like add it to other mapping configurations), then it
> gets replaced later by another Column because the declared attr was
> called again and the mappings blow up.  That's what the registry is
> meant to fix (here is the example of that:
> https://bitbucket.org/zzzeek/sqlalchemy/issues/3149/mixin_column-to-provide-more-context-for).
>   But the registry fixes that.   the warning is showing itself to be
> overkill here.   so let's take it out
>
>>
>> I've been through the docs here:
>> http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/mixins.html#combining-table-mapper-arguments-from-multiple-mixins
>>
>> ... but the examples provided do not include a base class whose
>> `__table_args__` can be simply inherited (ie: used as-is without needing to
>> redefine `__table_args__` in the subclass).
>>
>> I've been through the code and see why the warning is thrown (the class
>> doesn't have a `_sa_class_manager` property bolted on yet), but I can't tell
>> if this is something I can just ignore or not.  It currently seems like it
>> can't be ignored since I'm having some weird problems around this code
>> (still under investigation), but I'd like to know if there is some way to
>> safely prevent this warning while achieving the desired inheritance. If it
>> *is* actually ignorable, I've gone as far as considering temporarily hacking
>> on a `_sa_class_manager` property to suppress the warning, but yuck.
>>
>> Below is a small example of what I'm talking about.  The
>> `_BaseTableSetup_MIXIN` class sets up some common table definitions. Foo and
>> Bar use them outright via simple inheritance. Baz tries to extend the
>> `__table_args__`, but runs into the warning when accessing `__table_args__`
>> on the parent mixin.
>>
>> Am I doing something wrong?
>> How can this be done properly?
>> Is ignoring the warning a bad idea?
>>
>> ###
>> # sample code
>>
>> class _BaseTableSetup_MIXIN(object):
>>     a = Column(Integer)
>>     @declared_attr  # so subclasses
>>     def __table_args__(cls):
>>         # all derived classes/tables must have the unique constraint (but
>> should
>>         # also be free to add more)
>>         return (UniqueConstraint("a"), )
>>
>> class Foo(ORMBase, _BaseTableSetup_MIXIN):
>>     # This class defines no extra __table_args
>>     b = Column(Integer)
>>
>> class Bar(ORMBase, _BaseTableSetup_MIXIN):
>>     # This class also defines no extra __table_args
>>     c = Column(Integer)
>>
>> class Baz(ORMBase, _BaseTableSetup_MIXIN):
>>     # This class needs the full base setup, plus additional __table_args__
>>     d = Column(Integer)
>>     @declared_attr
>>     def __table_args__(cls):
>>         ret = list(_BaseTableSetup_MIXIN.__table_args__) # WARNING THROWN
>> HERE!
>>         ret.append(UniqueConstraint("d"))
>>         return tuple(ret)
>>
>> ###
>>
>> --
>> SQLAlchemy -
>> The Python SQL Toolkit and Object Relational Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete, and
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
>> description.
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sqlalchemy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to