[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