diff options
Diffstat (limited to 'lib/sqlalchemy/event/registry.py')
| -rw-r--r-- | lib/sqlalchemy/event/registry.py | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/lib/sqlalchemy/event/registry.py b/lib/sqlalchemy/event/registry.py index 11f5cb579..a34de3cd7 100644 --- a/lib/sqlalchemy/event/registry.py +++ b/lib/sqlalchemy/event/registry.py @@ -47,6 +47,7 @@ ref(listenercollection) -> { } """ + def _collection_gced(ref): # defaultdict, so can't get a KeyError if not _collection_to_key or ref not in _collection_to_key: @@ -60,6 +61,7 @@ def _collection_gced(ref): if not dispatch_reg: _key_to_collection.pop(key) + def _stored_in_collection(event_key, owner): key = event_key._key @@ -76,6 +78,7 @@ def _stored_in_collection(event_key, owner): listener_to_key = _collection_to_key[owner_ref] listener_to_key[listen_ref] = key + def _removed_from_collection(event_key, owner): key = event_key._key @@ -92,6 +95,7 @@ def _removed_from_collection(event_key, owner): listener_to_key = _collection_to_key[owner_ref] listener_to_key.pop(listen_ref) + def _stored_in_collection_multi(newowner, oldowner, elements): if not elements: return @@ -113,6 +117,7 @@ def _stored_in_collection_multi(newowner, oldowner, elements): new_listener_to_key[listen_ref] = key + def _clear(owner, elements): if not elements: return @@ -133,8 +138,8 @@ class _EventKey(object): """Represent :func:`.listen` arguments. """ - - def __init__(self, target, identifier, fn, dispatch_target, _fn_wrap=None): + def __init__(self, target, identifier, + fn, dispatch_target, _fn_wrap=None): self.target = target self.identifier = identifier self.fn = fn @@ -159,7 +164,7 @@ class _EventKey(object): self.fn, self.dispatch_target, _fn_wrap=fn_wrap - ) + ) def with_dispatch_target(self, dispatch_target): if dispatch_target is self.dispatch_target: @@ -171,12 +176,13 @@ class _EventKey(object): self.fn, dispatch_target, _fn_wrap=self.fn_wrap - ) + ) def listen(self, *args, **kw): once = kw.pop("once", False) if once: - self.with_wrapper(util.only_once(self._listen_fn)).listen(*args, **kw) + self.with_wrapper( + util.only_once(self._listen_fn)).listen(*args, **kw) else: self.dispatch_target.dispatch._listen(self, *args, **kw) @@ -185,9 +191,9 @@ class _EventKey(object): if key not in _key_to_collection: raise exc.InvalidRequestError( - "No listeners found for event %s / %r / %s " % - (self.target, self.identifier, self.fn) - ) + "No listeners found for event %s / %r / %s " % + (self.target, self.identifier, self.fn) + ) dispatch_reg = _key_to_collection.pop(key) for collection_ref, listener_ref in dispatch_reg.items(): @@ -202,7 +208,7 @@ class _EventKey(object): return self._key in _key_to_collection def base_listen(self, propagate=False, insert=False, - named=False): + named=False): target, identifier, fn = \ self.dispatch_target, self.identifier, self._listen_fn @@ -214,10 +220,10 @@ class _EventKey(object): if insert: dispatch_descriptor.\ - for_modify(target.dispatch).insert(self, propagate) + for_modify(target.dispatch).insert(self, propagate) else: dispatch_descriptor.\ - for_modify(target.dispatch).append(self, propagate) + for_modify(target.dispatch).append(self, propagate) @property def _listen_fn(self): @@ -238,5 +244,3 @@ class _EventKey(object): def prepend_to_list(self, owner, list_): _stored_in_collection(self, owner) list_.insert(0, self._listen_fn) - - |
