diff options
| author | Jason Madden <jamadden@gmail.com> | 2021-03-15 10:04:09 -0500 |
|---|---|---|
| committer | Jason Madden <jamadden@gmail.com> | 2021-03-15 10:04:09 -0500 |
| commit | 820b9b0299727b47960588b5d09d39e3911f7066 (patch) | |
| tree | c289927583a737fc4d0d5bf3a606d0c5fd2772ad /src/zope/interface | |
| parent | 50c73de0a8f8712810213bd4f1ed9c2850e1c8b2 (diff) | |
| download | zope-interface-820b9b0299727b47960588b5d09d39e3911f7066.tar.gz | |
Share code between registered and subscribed.
Diffstat (limited to 'src/zope/interface')
| -rw-r--r-- | src/zope/interface/adapter.py | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/zope/interface/adapter.py b/src/zope/interface/adapter.py index c75a869..c2793f6 100644 --- a/src/zope/interface/adapter.py +++ b/src/zope/interface/adapter.py @@ -293,11 +293,14 @@ class BaseAdapterRegistry(object): self.changed(self) - def registered(self, required, provided, name=u''): + def _find_leaf(self, byorder, required, provided, name): + # Find the leaf value, if any, in the *byorder* list + # for the interface sequence *required* and the interface + # *provided*, given the already normalized *name*. + # + # If no such leaf value exists, returns ``None`` required = tuple([_convert_None_to_Interface(r) for r in required]) - name = _normalize_name(name) order = len(required) - byorder = self._adapters if len(byorder) <= order: return None @@ -312,6 +315,14 @@ class BaseAdapterRegistry(object): return components.get(name) + def registered(self, required, provided, name=u''): + return self._find_leaf( + self._adapters, + required, + provided, + _normalize_name(name) + ) + @classmethod def _allKeys(cls, components, i, parent_k=()): if i == 0: @@ -431,23 +442,12 @@ class BaseAdapterRegistry(object): self.changed(self) def subscribed(self, required, provided, subscriber): - required = tuple([_convert_None_to_Interface(r) for r in required]) - name = u'' - order = len(required) - byorder = self._subscribers - if len(byorder) <= order: - return None - - components = byorder[order] - key = required + (provided,) - - for k in key: - d = components.get(k) - if d is None: - return None - components = d - - subscribers = components.get(name, ()) + subscribers = self._find_leaf( + self._subscribers, + required, + provided, + u'' + ) or () return subscriber if subscriber in subscribers else None def allSubscriptions(self): |
