[Zope-Checkins] CVS: Zope/lib/python/Products/Sessions - SessionDataManager.py:1.18

Chris McDonough chrism@zope.com
Mon, 24 Jun 2002 15:31:18 -0400


Update of /cvs-repository/Zope/lib/python/Products/Sessions
In directory cvs.zope.org:/tmp/cvs-serv1991

Modified Files:
	SessionDataManager.py 
Log Message:
Changed transient object invalidate() method to search acquisition
chain for its transient object container.

Changed session data manager to splice itself into the transient
object container's acquisition path before returning a session
data object via getSessionData.

Updated unit tests to reflect changes.



=== Zope/lib/python/Products/Sessions/SessionDataManager.py 1.17 => 1.18 ===
         """ returns new or existing session data object """
         container = self._getSessionDataContainer()
-        ob = aq_base(container.new_or_existing(key))
+        ob = container.new_or_existing(key)
+        if hasattr(ob, '__of__') and hasattr(ob, 'aq_parent'):
+            # splice ourselves into the acquisition chain
+            return ob.__of__(self.__of__(ob.aq_parent))
         return ob.__of__(self)
 
     def _getSessionDataObjectByKey(self, key):
         """ returns new or existing session data object """
         container = self._getSessionDataContainer()
-        ob = aq_base(container.get(key))
+        ob = container.get(key)
         if ob is not None:
+            if hasattr(ob, '__of__') and hasattr(ob, 'aq_parent'):
+                # splice ourselves into the acquisition chain
+                return ob.__of__(self.__of__(ob.aq_parent))
             return ob.__of__(self)
 
     def _getSessionDataContainer(self):
@@ -260,3 +266,5 @@
             return
         if self._requestSessionName is not None:
             request.set_lazy(self._requestSessionName, getSessionData)
+
+Globals.InitializeClass(SessionDataManager)