[Checkins] SVN: zc.copyversion/trunk/src/zc/copyversion/ Make the
subscriber behavior opt-in, and move test to a separate file.
Gary Poster
gary at zope.com
Sat Aug 19 21:42:37 EDT 2006
Log message for revision 69701:
Make the subscriber behavior opt-in, and move test to a separate file.
Changed:
U zc.copyversion/trunk/src/zc/copyversion/README.txt
U zc.copyversion/trunk/src/zc/copyversion/interfaces.py
U zc.copyversion/trunk/src/zc/copyversion/subscribers.py
U zc.copyversion/trunk/src/zc/copyversion/tests.py
-=-
Modified: zc.copyversion/trunk/src/zc/copyversion/README.txt
===================================================================
--- zc.copyversion/trunk/src/zc/copyversion/README.txt 2006-08-20 01:36:39 UTC (rev 69700)
+++ zc.copyversion/trunk/src/zc/copyversion/README.txt 2006-08-20 01:42:37 UTC (rev 69701)
@@ -195,50 +195,6 @@
>>> d.simple_property
'hi'
-Finally, it contains a subscriber that uses the zope.locking code to freeze
-objects when they are versioned. When combined with packages such as
-zc.tokenpolicy, objects that are not version-aware can still effectively
-be governed by the versioned status for user interaction through a security
-proxy.
-
- >>> import zope.locking.utility
- >>> import zope.app.keyreference.interfaces
- >>> import zope.locking.interfaces
- >>> util = zope.locking.utility.TokenUtility()
- >>> component.provideUtility(
- ... util, provides=zope.locking.interfaces.ITokenUtility)
- >>> class DemoKeyReference(object):
- ... component.adapts(Demo)
- ... interface.implements(
- ... zope.app.keyreference.interfaces.IKeyReference)
- ... _class_counter = 0
- ... def __init__(self, context):
- ... self.context = context
- ... class_ = type(self)
- ... self._id = getattr(context, '__demo_key_reference__', None)
- ... if self._id is None:
- ... self._id = class_._class_counter
- ... context.__demo_key_reference__ = self._id
- ... class_._class_counter += 1
- ... key_type_id = 'zc.copyversion.README.DemoKeyReference'
- ... def __call__(self):
- ... return self.context
- ... def __hash__(self):
- ... return (self.key_type_id, self._id)
- ... def __cmp__(self, other):
- ... if self.key_type_id == other.key_type_id:
- ... return cmp(self._id, other._id)
- ... return cmp(self.key_type_id, other.key_type_id)
- ...
- >>> component.provideAdapter(DemoKeyReference)
- >>> from zc.copyversion import subscribers
- >>> component.provideHandler(subscribers.freezer)
- >>> d = Demo()
- >>> util.get(d) # None
- >>> interfaces.IVersioning(d)._z_version()
- >>> zope.locking.interfaces.IFreeze.providedBy(util.get(d))
- True
-
Our copyversion story still needs other components.
- copy subscribers account for resetting objectlog and comments across copies.
Modified: zc.copyversion/trunk/src/zc/copyversion/interfaces.py
===================================================================
--- zc.copyversion/trunk/src/zc/copyversion/interfaces.py 2006-08-20 01:36:39 UTC (rev 69700)
+++ zc.copyversion/trunk/src/zc/copyversion/interfaces.py 2006-08-20 01:42:37 UTC (rev 69701)
@@ -34,6 +34,11 @@
"""do not use the hook: continue copying recursively
(see ICopyHook.__call__)"""
+class ITokenEnforced(interface.Interface):
+ """A marker interface indicating that the instance wants to have its
+ versioning enforced by zope.locking tokens (see the subscribers module).
+ """
+
class ICopyHook(interface.Interface):
"""an adapter to an object that is being copied"""
def __call__(location, register):
@@ -53,4 +58,4 @@
the copy hook. Only of internal interest."""
_z_version_timestamp = interface.Attribute(
- "datetime.datetime in pytz.utc of when versioned, or None.")
\ No newline at end of file
+ "datetime.datetime in pytz.utc of when versioned, or None.")
Modified: zc.copyversion/trunk/src/zc/copyversion/subscribers.py
===================================================================
--- zc.copyversion/trunk/src/zc/copyversion/subscribers.py 2006-08-20 01:36:39 UTC (rev 69700)
+++ zc.copyversion/trunk/src/zc/copyversion/subscribers.py 2006-08-20 01:42:37 UTC (rev 69701)
@@ -3,10 +3,9 @@
import zope.locking.interfaces
import zope.locking.tokens
- at component.adapter(interfaces.IObjectVersionedEvent)
-def freezer(ev):
+ at component.adapter(interfaces.ITokenEnforced, interfaces.IObjectVersionedEvent)
+def freezer(obj, ev):
util = component.getUtility(zope.locking.interfaces.ITokenUtility)
- obj = ev.object
token = util.get(obj)
if token is not None:
if zope.locking.interfaces.IEndable.providedBy(token):
Modified: zc.copyversion/trunk/src/zc/copyversion/tests.py
===================================================================
--- zc.copyversion/trunk/src/zc/copyversion/tests.py 2006-08-20 01:36:39 UTC (rev 69700)
+++ zc.copyversion/trunk/src/zc/copyversion/tests.py 2006-08-20 01:42:37 UTC (rev 69701)
@@ -20,6 +20,14 @@
assert zope.event.subscribers.pop().__self__ is events
del events[:] # being paranoid
+def subscribersSetUp(test):
+ placelesssetup.setUp(test)
+ zope.testing.module.setUp(test, 'zc.copyversion.subscribers_txt')
+
+def subscribersTearDown(test):
+ zope.testing.module.tearDown(test)
+ placelesssetup.tearDown(test)
+
def copierSetUp(test):
zope.testing.module.setUp(test, 'zc.copyversion.copier_txt')
testing.setUp(test)
@@ -36,6 +44,10 @@
'README.txt',
setUp=setUp, tearDown=tearDown),
doctest.DocFileSuite(
+ 'subscribers.txt',
+ setUp=subscribersSetUp, tearDown=subscribersTearDown,
+ optionflags=doctest.INTERPRET_FOOTNOTES),
+ doctest.DocFileSuite(
'copier.txt',
setUp=copierSetUp,
tearDown=copierTearDown),
More information about the Checkins
mailing list