[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