[Checkins] SVN: zope.session/trunk/ Added option to disable implicit sweeps in persistent session data containers.

Amos Latteier amos at latteier.com
Tue Mar 8 11:01:04 EST 2011


Log message for revision 120808:
  Added option to disable implicit sweeps in persistent session data containers.
  

Changed:
  U   zope.session/trunk/CHANGES.txt
  U   zope.session/trunk/src/zope/session/session.py

-=-
Modified: zope.session/trunk/CHANGES.txt
===================================================================
--- zope.session/trunk/CHANGES.txt	2011-03-08 12:53:28 UTC (rev 120807)
+++ zope.session/trunk/CHANGES.txt	2011-03-08 16:01:04 UTC (rev 120808)
@@ -1,13 +1,14 @@
 CHANGES
 =======
 
-3.9.4 (unreleased)
+3.9.4 (2011-03-07)
 ------------------
 
 - Added an explicit `provides` to the IClientId adapter declaration in
   adapter.zcml.
 
-- ...
+- Added option to disable implicit sweeps in
+  PersistentSessionDataContainer.
 
 
 3.9.3 (2010-09-25)

Modified: zope.session/trunk/src/zope/session/session.py
===================================================================
--- zope.session/trunk/src/zope/session/session.py	2011-03-08 12:53:28 UTC (rev 120807)
+++ zope.session/trunk/src/zope/session/session.py	2011-03-08 16:01:04 UTC (rev 120808)
@@ -74,6 +74,7 @@
     zope.interface.implements(ISessionDataContainer)
 
     _v_last_sweep = 0 # Epoch time sweep last run
+    disable_implicit_sweeps = False
 
     def __init__(self):
         self.data = OOBTree()
@@ -103,6 +104,35 @@
                 [...]
             KeyError: 'clientid'
 
+        Can you disable the automatic removal of stale data.
+
+            >>> sdc.disable_implicit_sweeps = True
+            >>> sdc['stale'] = stale = SessionData()
+
+        Now we try the same method of winding back the clock.
+
+            >>> stale.setLastAccessTime(sd.getLastAccessTime() - 64)
+            >>> sdc._v_last_sweep = sdc._v_last_sweep - 4
+
+        But the data is not automatically removed.
+
+            >>> sdc['stale'] #doctest: +ELLIPSIS
+            <zope.session.session.SessionData object at ...>
+
+        We can manually remove stale data by calling sweep() if stale
+        data isn't being automatically removed.
+
+            >>> stale.setLastAccessTime(sd.getLastAccessTime() - 64)
+            >>> sdc.sweep()
+            >>> sdc['stale']
+            Traceback (most recent call last):
+                [...]
+            KeyError: 'stale'
+
+        Now we turn automatic removal back on.
+
+            >>> sdc.disable_implicit_sweeps = False
+
         Ensure the lastAccessTime on the ISessionData is being updated
         occasionally. The ISessionDataContainer maintains this whenever
         the ISessionData is set or retrieved.
@@ -202,7 +232,8 @@
             except AttributeError:
                 pass
 
-        if self._v_last_sweep + self.resolution < now:
+        if (self._v_last_sweep + self.resolution < now and
+            not self.disable_implicit_sweeps):
             self.sweep()
             if getattr(self, '_v_old_sweep', None) is None:
                 self._v_old_sweep = self._v_last_sweep



More information about the checkins mailing list