[Checkins] SVN: zope.component/branches/tlotze-patching-interfaces/src/zope/component/_ implemented adapt and utility methods that get patched onto interfaces during import

Thomas Lotze tl at gocept.com
Thu Dec 17 09:10:40 EST 2009


Log message for revision 106701:
  implemented adapt and utility methods that get patched onto interfaces during import

Changed:
  U   zope.component/branches/tlotze-patching-interfaces/src/zope/component/__init__.py
  U   zope.component/branches/tlotze-patching-interfaces/src/zope/component/_api.py

-=-
Modified: zope.component/branches/tlotze-patching-interfaces/src/zope/component/__init__.py
===================================================================
--- zope.component/branches/tlotze-patching-interfaces/src/zope/component/__init__.py	2009-12-17 13:30:46 UTC (rev 106700)
+++ zope.component/branches/tlotze-patching-interfaces/src/zope/component/__init__.py	2009-12-17 14:10:40 UTC (rev 106701)
@@ -60,3 +60,6 @@
 
 moduleProvides(IComponentArchitecture, IComponentRegistrationConvenience)
 __all__ = tuple(IComponentArchitecture)
+
+from zope.component._api import patch_Interface
+patch_Interface()

Modified: zope.component/branches/tlotze-patching-interfaces/src/zope/component/_api.py
===================================================================
--- zope.component/branches/tlotze-patching-interfaces/src/zope/component/_api.py	2009-12-17 13:30:46 UTC (rev 106700)
+++ zope.component/branches/tlotze-patching-interfaces/src/zope/component/_api.py	2009-12-17 14:10:40 UTC (rev 106701)
@@ -236,3 +236,37 @@
                 if iface.isOrExtends(interface):
                     yield name, factory
                     break
+
+
+# Patch zope.interface.Interface
+
+_marker = object()
+
+def adapt(iface, name=u'', default=_marker, context=None, *objects):
+    if not objects:
+        raise TypeError('You need to adapt at least one object.')
+    if len(objects) == 1:
+        if default is _marker:
+            return getAdapter(objects[0], iface, name=name, context=context)
+        else:
+            return queryAdapter(objects[0], iface,
+                                name=name, default=default, context=context)
+    else:
+        if default is _marker:
+            return getMultiAdapter(objects, iface, name=name, context=context)
+        else:
+            return queryMultiAdapter(
+                objects, iface, name=name, default=default, context=context)
+
+
+def utility(iface, name=u'', default=_marker, context=None):
+    if default is _marker:
+        return getUtility(iface, name=name, context=context)
+    else:
+        return queryUtility(
+            iface, name=name, default=default, context=context)
+
+
+def patch_Interface():
+    Interface.adapt = adapt
+    Interface.utility = utility



More information about the checkins mailing list