.. changelog::
: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
.. autoclass:: AssociationProxy
:members:
:undoc-members:
+ :inherited-members:
.. autodata:: ASSOCIATION_PROXY
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
: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
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):
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'})