summaryrefslogtreecommitdiff
path: root/src/zope/interface
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2021-03-15 10:04:09 -0500
committerJason Madden <jamadden@gmail.com>2021-03-15 10:04:09 -0500
commit820b9b0299727b47960588b5d09d39e3911f7066 (patch)
treec289927583a737fc4d0d5bf3a606d0c5fd2772ad /src/zope/interface
parent50c73de0a8f8712810213bd4f1ed9c2850e1c8b2 (diff)
downloadzope-interface-820b9b0299727b47960588b5d09d39e3911f7066.tar.gz
Share code between registered and subscribed.
Diffstat (limited to 'src/zope/interface')
-rw-r--r--src/zope/interface/adapter.py40
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):