[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