diff options
Diffstat (limited to 'lib/sqlalchemy/event/attr.py')
| -rw-r--r-- | lib/sqlalchemy/event/attr.py | 39 | 
1 files changed, 20 insertions, 19 deletions
diff --git a/lib/sqlalchemy/event/attr.py b/lib/sqlalchemy/event/attr.py index 57adc4208..7641b595a 100644 --- a/lib/sqlalchemy/event/attr.py +++ b/lib/sqlalchemy/event/attr.py @@ -44,6 +44,7 @@ class RefCollection(object):      def ref(self):          return weakref.ref(self, registry._collection_gced) +  class _DispatchDescriptor(RefCollection):      """Class-level attributes on :class:`._Dispatch` classes.""" @@ -53,13 +54,13 @@ class _DispatchDescriptor(RefCollection):          self.arg_names = argspec.args[1:]          self.has_kw = bool(argspec.keywords)          self.legacy_signatures = list(reversed( -                        sorted( -                            getattr(fn, '_legacy_signatures', []), -                            key=lambda s: s[0] -                        ) -                    )) +            sorted( +                getattr(fn, '_legacy_signatures', []), +                key=lambda s: s[0] +            ) +        ))          self.__doc__ = fn.__doc__ = legacy._augment_fn_docs( -                                        self, parent_dispatch_cls, fn) +            self, parent_dispatch_cls, fn)          self._clslevel = weakref.WeakKeyDictionary()          self._empty_listeners = weakref.WeakKeyDictionary() @@ -83,11 +84,10 @@ class _DispatchDescriptor(RefCollection):              return fn(**argdict)          return wrap_kw -      def insert(self, event_key, propagate):          target = event_key.dispatch_target          assert isinstance(target, type), \ -                "Class-level Event targets must be classes." +            "Class-level Event targets must be classes."          stack = [target]          while stack:              cls = stack.pop(0) @@ -103,7 +103,7 @@ class _DispatchDescriptor(RefCollection):      def append(self, event_key, propagate):          target = event_key.dispatch_target          assert isinstance(target, type), \ -                "Class-level Event targets must be classes." +            "Class-level Event targets must be classes."          stack = [target]          while stack: @@ -170,10 +170,12 @@ class _DispatchDescriptor(RefCollection):          obj.__dict__[self.__name__] = ret          return ret +  class _HasParentDispatchDescriptor(object):      def _adjust_fn_spec(self, fn, named):          return self.parent._adjust_fn_spec(fn, named) +  class _EmptyListener(_HasParentDispatchDescriptor):      """Serves as a class-level interface to the events      served by a _DispatchDescriptor, when there are no @@ -183,6 +185,7 @@ class _EmptyListener(_HasParentDispatchDescriptor):      events are added.      """ +      def __init__(self, parent, target_cls):          if target_cls not in parent._clslevel:              parent.update_subclass(target_cls) @@ -192,7 +195,6 @@ class _EmptyListener(_HasParentDispatchDescriptor):          self.propagate = frozenset()          self.listeners = () -      def for_modify(self, obj):          """Return an event collection which can be modified. @@ -268,6 +270,7 @@ class _CompoundListener(_HasParentDispatchDescriptor):      __nonzero__ = __bool__ +  class _ListenerCollection(RefCollection, _CompoundListener):      """Instance-level attributes on instances of :class:`._Dispatch`. @@ -304,10 +307,10 @@ class _ListenerCollection(RefCollection, _CompoundListener):          existing_listener_set = set(existing_listeners)          self.propagate.update(other.propagate)          other_listeners = [l for l -                in other.listeners -                if l not in existing_listener_set -                and not only_propagate or l in self.propagate -                ] +                           in other.listeners +                           if l not in existing_listener_set +                           and not only_propagate or l in self.propagate +                           ]          existing_listeners.extend(other_listeners) @@ -346,9 +349,9 @@ class _JoinedDispatchDescriptor(object):              return self          else:              obj.__dict__[self.name] = ret = _JoinedListener( -                        obj.parent, self.name, -                        getattr(obj.local, self.name) -                    ) +                obj.parent, self.name, +                getattr(obj.local, self.name) +            )              return ret @@ -383,5 +386,3 @@ class _JoinedListener(_CompoundListener):      def clear(self):          raise NotImplementedError() - -  | 
