[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture - Service.py:1.1.6.3

Kapil k_vertigo@yahoo.com
Fri, 8 Feb 2002 15:53:49 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/ComponentArchitecture
In directory cvs.zope.org:/tmp/cvs-serv11838

Modified Files:
      Tag: Zope-3x-branch
	Service.py 
Log Message:
Added in context lookup to getService. fallsback to use Component Architecture
ServiceManager if no ServiceManager is found in context



=== Zope3/lib/python/Zope/ComponentArchitecture/Service.py 1.1.6.2 => 1.1.6.3 ===
 from Zope.Exceptions import DuplicationError, NotFoundError
 from IServiceService import IServiceService
+from IServiceManagerContainer import IServiceManagerContainer
+from Zope.ContextWrapper import getinnercontext
 
 
 class UndefinedService(Exception):
@@ -72,6 +74,20 @@
 serviceManager = ServiceManager()
 defineService  = serviceManager.defineService
 provideService = serviceManager.provideService
-getService     = serviceManager.getService
+
 _clear         = serviceManager._clear
+
+
+def getService(object, name):
+    """
+    context based lookup, with fallback to component architecture
+    service manager if no service manager found within context
+    """
+    while object is not None:
+        if IServiceManagerContainer.isImplementedBy(object):
+            sm = object.getServiceManager()
+            if sm:
+                return sm.getService(object, name)
+        object = getinnercontext(object)
+    return serviceManager.getService(object, name)