diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-10-20 12:50:53 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-10-25 12:09:41 -0400 |
commit | 92aa35e7fc737de58c25d6c22bf1c48f6c4c714b (patch) | |
tree | f3c46d6d198441bb7f8ca7e8a7b2322b26491782 /lib/sqlalchemy | |
parent | 605d0d905855684bfe4409532af98f336ae38f82 (diff) | |
download | sqlalchemy-92aa35e7fc737de58c25d6c22bf1c48f6c4c714b.tar.gz |
deprecation warnings: strings in loader options, join, with_parent
Repairs one in-library deprecation warning regarding
mapper propagation of options
raises maxfail to 250, as 25 is too low when we are trying
to address many errors at once. the 25 was originally
due to the fact that our fixtures would be broken after
that many failures in most cases, which today should not
be the case nearly as often.
Change-Id: I26affddf42e2cae2aaf9561633e9b8cd431eb189
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/ext/associationproxy.py | 19 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/strategy_options.py | 3 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/warnings.py | 8 |
4 files changed, 26 insertions, 14 deletions
diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index 411033a6b..dd5c10ac9 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -472,10 +472,23 @@ class AssociationProxyInstance(object): def attr(self): """Return a tuple of ``(local_attr, remote_attr)``. - This attribute is convenient when specifying a join - using :meth:`_query.Query.join` across two relationships:: + This attribute was originally intended to facilitate using the + :meth:`_query.Query.join` method to join across the two relationships + at once, however this makes use of a deprecated calling style. + + To use :meth:`_sql.select.join` or :meth:`_orm.Query.join` with + an association proxy, the current method is to make use of the + :attr:`.AssociationProxyInstance.local_attr` and + :attr:`.AssociationProxyInstance.remote_attr` attributes separately:: + + stmt = ( + select(Parent). + join(Parent.proxied.local_attr). + join(Parent.proxied.remote_attr) + ) - sess.query(Parent).join(*Parent.proxied.attr) + A future release may seek to provide a more succinct join pattern + for association proxy attributes. .. seealso:: diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 1aa6666a5..4de12b88c 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -3111,14 +3111,20 @@ class Mapper( # "enable" options, to turn on the properties that we want to # load by default (subject to options from the query) enable_opt.set_generic_strategy( - (prop.key,), dict(prop.strategy_key) + # convert string name to an attribute before passing + # to loader strategy + (getattr(entity.entity_namespace, prop.key),), + dict(prop.strategy_key), ) else: # "disable" options, to turn off the properties from the # superclass that we *don't* want to load, applied after # the options from the query to override them disable_opt.set_generic_strategy( - (prop.key,), {"do_nothing": True} + # convert string name to an attribute before passing + # to loader strategy + (getattr(entity.entity_namespace, prop.key),), + {"do_nothing": True}, ) primary_key = [ diff --git a/lib/sqlalchemy/orm/strategy_options.py b/lib/sqlalchemy/orm/strategy_options.py index b7ed4e89b..675c7218b 100644 --- a/lib/sqlalchemy/orm/strategy_options.py +++ b/lib/sqlalchemy/orm/strategy_options.py @@ -301,6 +301,7 @@ class Load(Generative, LoaderOption): ) if isinstance(attr, util.string_types): + default_token = attr.endswith(_DEFAULT_TOKEN) attr_str_name = attr if attr.endswith(_WILDCARD_TOKEN) or default_token: @@ -328,7 +329,7 @@ class Load(Generative, LoaderOption): "Using strings to indicate column or " "relationship paths in loader options is deprecated " "and will be removed in SQLAlchemy 2.0. Please use " - "the class-bound attribute directly." + "the class-bound attribute directly.", ) try: # use getattr on the class to work around diff --git a/lib/sqlalchemy/testing/warnings.py b/lib/sqlalchemy/testing/warnings.py index 9e02a0c03..9886b122d 100644 --- a/lib/sqlalchemy/testing/warnings.py +++ b/lib/sqlalchemy/testing/warnings.py @@ -73,16 +73,8 @@ def setup_filters(): r"The Query\.with_parent\(\) method", r"The Query\.select_entity_from\(\) method", r"The ``aliased`` and ``from_joinpoint`` keyword arguments", - r"Using strings to indicate relationship names in Query.join", - r"Using strings to indicate column or relationship paths in " - "loader options", - r"Using strings to indicate relationship names in the ORM " - r"with_parent\(\)", r"The Query.with_polymorphic\(\) method is considered " "legacy as of the 1.x series", - r"Passing a chain of multiple join conditions to Query.join\(\) " - r"is deprecated and will be removed in SQLAlchemy 2.0.", - r"Query.join\(\) will no longer accept tuples as arguments", # # ORM Session # |