[Checkins] SVN: zc.copyversion/trunk/src/zc/copyversion/subscribers.txt forgot actual new test file

Gary Poster gary at zope.com
Sat Aug 19 21:43:24 EDT 2006


Log message for revision 69702:
  forgot actual new test file
  

Changed:
  A   zc.copyversion/trunk/src/zc/copyversion/subscribers.txt

-=-
Added: zc.copyversion/trunk/src/zc/copyversion/subscribers.txt
===================================================================
--- zc.copyversion/trunk/src/zc/copyversion/subscribers.txt	2006-08-20 01:42:37 UTC (rev 69701)
+++ zc.copyversion/trunk/src/zc/copyversion/subscribers.txt	2006-08-20 01:43:23 UTC (rev 69702)
@@ -0,0 +1,87 @@
+The subscribers module contains a subscriber for "enforcing" versioning
+using zope.locking tokens.  This, of course, assumes that zope.locking
+tokens are configured to themselves be enforced somehow, using
+approaches such as those in zc.tokenpolicy.  By default, this `freezer`
+subscriber is registered only for objects that provide
+zc.copyversion.interfaces.ITokenEnforced.  Imagine a demo object that
+implements ITokenEnforced, with a token utility already in place [#setup]_.
+
+    >>> import zc.copyversion.subscribers
+    >>> import zope.component
+    >>> zope.component.provideHandler(zc.copyversion.subscribers.freezer)
+    >>> demo = Demo()
+    >>> import zc.copyversion.interfaces
+    >>> import zope.interface
+    >>> zope.interface.directlyProvides(
+    ...     demo, zc.copyversion.interfaces.ITokenEnforced)
+    >>> zc.copyversion.interfaces.ITokenEnforced.providedBy(demo)
+    True
+    >>> util.get(demo) is None
+    True
+    >>> demo._z_versioned
+    False
+    >>> demo._z_version()
+    >>> demo._z_versioned
+    True
+    >>> import zope.locking.interfaces
+    >>> zope.locking.interfaces.IFreeze.providedBy(util.get(demo))
+    True
+
+If an object does not provide ITokenEnforced, the subscriber will not
+fire, given a default registration.
+
+    >>> demo2 = Demo()
+    >>> zc.copyversion.interfaces.ITokenEnforced.providedBy(demo2)
+    False
+    >>> demo2._z_version()
+    >>> demo2._z_versioned
+    True
+    >>> util.get(demo2) is None
+    True
+
+=========
+Footnotes
+=========
+
+.. [#setup] This sets up a zope.locking token utility as a global,
+    non-persistent utility.  This is completely useless and even dangerous
+    in real use, but is fine for this test.  This code also creates a Demo
+    class that provides IVersioning and can be used in our non-persistent
+    setup.
+
+    >>> from zope import interface, component
+    >>> from zope.locking import utility, interfaces
+    >>> util = utility.TokenUtility()
+    >>> component.provideUtility(util, provides=interfaces.ITokenUtility)
+    >>> import zope.app.keyreference.interfaces
+    >>> class IDemo(interface.Interface):
+    ...     """a demonstration interface for a demonstration class"""
+    ...
+    >>> import zc.copyversion.versioning
+    >>> class Demo(zc.copyversion.versioning.Versioning):
+    ...     interface.implements(IDemo)
+    ...
+    >>> class DemoKeyReference(object):
+    ...     component.adapts(IDemo)
+    ...     _class_counter = 0
+    ...     interface.implements(
+    ...         zope.app.keyreference.interfaces.IKeyReference)
+    ...     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)


Property changes on: zc.copyversion/trunk/src/zc/copyversion/subscribers.txt
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list