diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-10-09 18:01:43 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-10-09 18:01:43 -0400 |
commit | 9d08c6abc21dcf3d832897d38aaba84aeaa14fa6 (patch) | |
tree | 53be8f8cb77dddfe9a901c81ed234acdf29761cf | |
parent | 78a7bbdb3b0906a35528bdc829a08f0644d6fd7b (diff) | |
download | sqlalchemy-9d08c6abc21dcf3d832897d38aaba84aeaa14fa6.tar.gz |
- Added the :paramref:`.AssociationProxy.info` parameter to the
:class:`.AssociationProxy` constructor, to suit the
:attr:`.AssociationProxy.info` accessor that was added in
:ticket:`2971`. This is possible because :class:`.AssociationProxy`
is constructed explicitly, unlike a hybrid which is constructed
implicitly via the decorator syntax.
fixes #3551
-rw-r--r-- | doc/build/changelog/changelog_10.rst | 12 | ||||
-rw-r--r-- | doc/build/orm/extensions/associationproxy.rst | 1 | ||||
-rw-r--r-- | lib/sqlalchemy/ext/associationproxy.py | 9 | ||||
-rw-r--r-- | test/ext/test_associationproxy.py | 20 |
4 files changed, 41 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index a3b3e0092..b6a944a1e 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -19,6 +19,18 @@ :version: 1.0.9 .. change:: + :tags: feature, ext + :versions: 1.1.0b1 + :tickets: 3551 + + Added the :paramref:`.AssociationProxy.info` parameter to the + :class:`.AssociationProxy` constructor, to suit the + :attr:`.AssociationProxy.info` accessor that was added in + :ticket:`2971`. This is possible because :class:`.AssociationProxy` + is constructed explicitly, unlike a hybrid which is constructed + implicitly via the decorator syntax. + + .. change:: :tags: bug, oracle :versions: 1.1.0b1 :tickets: 3548 diff --git a/doc/build/orm/extensions/associationproxy.rst b/doc/build/orm/extensions/associationproxy.rst index 6fc57e30c..7e7b1f9de 100644 --- a/doc/build/orm/extensions/associationproxy.rst +++ b/doc/build/orm/extensions/associationproxy.rst @@ -509,5 +509,6 @@ API Documentation .. autoclass:: AssociationProxy :members: :undoc-members: + :inherited-members: .. autodata:: ASSOCIATION_PROXY diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index d837aab52..29064ef27 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -94,7 +94,7 @@ class AssociationProxy(interfaces.InspectionAttrInfo): def __init__(self, target_collection, attr, creator=None, getset_factory=None, proxy_factory=None, - proxy_bulk_set=None): + proxy_bulk_set=None, info=None): """Construct a new :class:`.AssociationProxy`. The :func:`.association_proxy` function is provided as the usual @@ -138,6 +138,11 @@ class AssociationProxy(interfaces.InspectionAttrInfo): :param proxy_bulk_set: Optional, use with proxy_factory. See the _set() method for details. + :param info: optional, will be assigned to + :attr:`.AssociationProxy.info` if present. + + .. versionadded:: 1.0.9 + """ self.target_collection = target_collection self.value_attr = attr @@ -150,6 +155,8 @@ class AssociationProxy(interfaces.InspectionAttrInfo): self.key = '_%s_%s_%s' % ( type(self).__name__, target_collection, id(self)) self.collection_class = None + if info: + self.info = info @property def remote_attr(self): diff --git a/test/ext/test_associationproxy.py b/test/ext/test_associationproxy.py index 8fb335b06..98e40b11e 100644 --- a/test/ext/test_associationproxy.py +++ b/test/ext/test_associationproxy.py @@ -1593,3 +1593,23 @@ class DictOfTupleUpdateTest(fixtures.TestBase): a1.elements.update, (("B", 3), 'elem2'), (("C", 4), "elem3") ) + + +class InfoTest(fixtures.TestBase): + def test_constructor(self): + assoc = association_proxy('a', 'b', info={'some_assoc': 'some_value'}) + eq_(assoc.info, {"some_assoc": "some_value"}) + + def test_empty(self): + assoc = association_proxy('a', 'b') + eq_(assoc.info, {}) + + def test_via_cls(self): + class Foob(object): + assoc = association_proxy('a', 'b') + + eq_(Foob.assoc.info, {}) + + Foob.assoc.info["foo"] = 'bar' + + eq_(Foob.assoc.info, {'foo': 'bar'}) |