[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)