[Zope-Checkins] CVS: Zope3/lib/python/Zope/ComponentArchitecture - IToIRegistry.py:1.1.4.17 hooks.py:1.1.2.24

Jim Fulton jim@zope.com
Sun, 28 Apr 2002 13:17:15 -0400


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

Modified Files:
      Tag: Zope-3x-branch
	IToIRegistry.py hooks.py 
Log Message:
HOTYB: Merged SecurityProxy-branch into main branch.  

All tests pass and folders can be listed and added through the web.
It is likely that most other things don't work and will need to be
fixed. The reason is that many accesses that should have been checked
before are now being checked and additional checks and thinking about
permissions and security settings are needed.

I'm in the process of drafting a paper for the wiki that describes the
changes in more detail.


=== Zope3/lib/python/Zope/ComponentArchitecture/IToIRegistry.py 1.1.4.16 => 1.1.4.17 ===
 from Exceptions import Invalid
 from types import ListType, TupleType
-
+from Zope.Proxy.ProxyIntrospection import removeAllProxies
 
 class IToIRegistry:  # Interface to Interface
     
@@ -155,7 +155,7 @@
         return result
 
     def getForObject(self, ob, provided):
-        for i in objectImplements(ob):
+        for i in objectImplements(removeAllProxies(ob)):
             c=self.get(i, provided)
             if c is not None: return c
         return self.get(None, provided)
@@ -168,7 +168,7 @@
         """
         result = []
         seen = {}
-        for i in objectImplements(ob):
+        for i in objectImplements(removeAllProxies(ob)):
             self.getAll(i, provided, result, seen)
 
         return self.getAll(None, provided, result, seen)
@@ -229,10 +229,10 @@
         self._registerAll(require, None, data, None)
 
     def getForObject(self, ob):
-        return IToIRegistry.getForObject(self, ob, None)
+        return IToIRegistry.getForObject(self, removeAllProxies(ob), None)
 
     def getAllForObject(self, ob):
-        return IToIRegistry.getAllForObject(self, ob, None)
+        return IToIRegistry.getAllForObject(self, removeAllProxies(ob), None)
 
     def getForType(self, interface):
         return self.get(interface, None)


=== Zope3/lib/python/Zope/ComponentArchitecture/hooks.py 1.1.2.23 => 1.1.2.24 ===
 from Exceptions import ComponentLookupError
 from Service import serviceManager
+from Zope.Proxy.ProxyIntrospection import removeAllProxies
 
 _marker=[]
 def provideAdapter(forInterface, providedInterface, maker):
@@ -103,7 +104,7 @@
         place = object
         
     
-    if interface.isImplementedBy(object): return object
+    if interface.isImplementedBy(removeAllProxies(object)): return object
     makers = _adapters.getForObject(object, interface)
     if makers is None: return default
     result = object
@@ -128,7 +129,7 @@
 
 
 def provideFactory_hook(qname, factory):
-    _verify(_IFactory, factory)
+    _verify(_IFactory, removeAllProxies(factory))
     _factories[qname] = factory
 
 def createObject_hook(place, name, args=[], kwargs={}):