[Checkins] SVN: zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/ checkpoint

Benji York benji at zope.com
Sat Feb 16 16:58:45 EST 2008


Log message for revision 83947:
  checkpoint
  

Changed:
  A   zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/README.txt
  A   zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/__init__.py
  D   zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.py
  D   zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.txt

-=-
Copied: zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/README.txt (from rev 83944, zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.txt)
===================================================================
--- zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/README.txt	                        (rev 0)
+++ zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/README.txt	2008-02-16 21:58:44 UTC (rev 83947)
@@ -0,0 +1,136 @@
+====================
+Extrinsic References
+====================
+
+Extrinsic registries record a key and one or more values to which they
+refer.  The key and all values must be adaptable to 
+zope.app.keyreference.interfaces.IKeyReference.
+
+    >>> from zc.extrinsicreference import ExtrinsicReferences
+    >>> references = ExtrinsicReferences()
+    >>> references.add(1, 2)
+    Traceback (most recent call last):
+    ...
+    TypeError: ('Could not adapt', 1...
+    >>> from zope import interface, component
+    >>> from zope.app.keyreference.interfaces import IKeyReference
+    >>> class IMyObject(interface.Interface):
+    ...     "An interface for which we register an IKeyReference adapter"
+    ...     id = interface.Attribute("An id unique to IMyObject instances")
+    ...
+    >>> class MyObject(object):
+    ...     interface.implements(IMyObject)
+    ...     _id_counter  = 0
+    ...     @classmethod
+    ...     def _getId(cls):
+    ...         val = cls._id_counter
+    ...         cls._id_counter += 1
+    ...         return val
+    ...     def __init__(self):
+    ...         self.id = self._getId()
+    ...
+    >>> class DummyKeyReference(object):
+    ...     interface.implements(IKeyReference)
+    ...     component.adapts(IMyObject)
+    ...     key_type_id = 'zc.extrinsicreference.doctest'
+    ...     def __init__(self, obj):
+    ...         self.object = obj
+    ...     def __call__(self):
+    ...         """Get the object this reference is linking to.
+    ...         """
+    ...         return self.object
+    ...     def __hash__(self):
+    ...         """Get a unique identifier of the referenced object.
+    ...         """
+    ...         return hash(self.object.id)
+    ...     def __cmp__(self, other):
+    ...         """Compare the reference to another reference.
+    ...         """
+    ...         if self.key_type_id == other.key_type_id:
+    ...             return cmp(self.object.id, other.object.id)
+    ...         return cmp(self.key_type_id, other.key_type_id)
+    ...
+    >>> component.provideAdapter(DummyKeyReference)
+    >>> object1 = MyObject()
+    >>> references.add(object1, 2)
+    Traceback (most recent call last):
+    ...
+    TypeError: ('Could not adapt', 2...
+    >>> value1 = MyObject()
+    >>> value2 = MyObject()
+    >>> references.add(object1, value1)
+    >>> references.add(object1, value2)
+
+Values can be retrieved by their key:
+
+    >>> set(references.get(object1)) == set((value1, value2))
+    True
+
+References can be removed:
+
+    >>> references.remove(object1, value1)
+    >>> list(references.get(object1)) == [value2]
+    True
+
+But if the reference is not registered, removing it raises a KeyError.
+
+    >>> references.remove(object1, value1)
+    Traceback (most recent call last):
+    ...
+    KeyError:...
+    >>> object2 = MyObject()
+    >>> references.remove(object2, value2)
+    Traceback (most recent call last):
+    ...
+    KeyError:...
+
+If you prefer to silently ignore these errors, use `discard`.
+
+    >>> references.discard(object1, value1)
+    >>> references.discard(object2, value2)
+
+Otherwise, you can use `contains` to determine if the reference exists:
+
+    >>> references.contains(object1, value1)
+    False
+    >>> references.contains(object2, value2)
+    False
+    >>> references.contains(object1, value2)
+    True
+
+If a key has no associated values, an empty iterable is returned:
+
+    >>> references.discard(object1, value2)
+    >>> list(references.get(object1))
+    []
+
+Adding a value more than once does not cause the value to be included
+in the result sequence more than once:
+
+    >>> references.add(object1, value1)
+    >>> references.add(object1, value1)
+    >>> list(references.get(object1)) == [value1]
+    True
+
+The `set` method destructively sets the given values for the object.  Repeated
+objects are collapsed to a single instance.
+
+    >>> references.set(object1, (value2, object2, value2, value2, object2))
+    >>> references.contains(object1, value1)
+    False
+    >>> len(list(references.get(object1)))
+    2
+    >>> set(references.get(object1)) == set((value2, object2))
+    True
+    >>> references.set(object1, ())
+    >>> len(list(references.get(object1)))
+    0
+
+The `update` method adds values to the previous values, non-destructively.
+
+    >>> references.add(object1, value1)
+    >>> references.update(object1, (value2, object2, value2))
+    >>> len(list(references.get(object1)))
+    3
+    >>> set(references.get(object1)) == set((value1, value2, object2))
+    True

Copied: zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/__init__.py (from rev 83945, zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.py)
===================================================================
--- zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/__init__.py	                        (rev 0)
+++ zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/__init__.py	2008-02-16 21:58:44 UTC (rev 83947)
@@ -0,0 +1,108 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Extrinsic references implementation"""
+
+import BTrees
+import persistent
+import zc.extrinsicreference.interfaces
+import zope.app.keyreference.interfaces
+import zope.component
+import zope.interface
+
+
+class ExtrinsicReferences(persistent.Persistent):
+
+    zope.interface.implements(
+        zc.extrinsicreference.interfaces.IExtrinsicReferences)
+
+    # To be usable as an ILocalUtility we have to have these.
+    __parent__ = __name__ = None
+
+    def __init__(self):
+        self.references = BTrees.OOBTree.OOBTree()
+
+    def add(self, obj, value):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key)
+        if refs is None:
+            refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
+        refs.insert(zope.app.keyreference.interface.IKeyReference(value))
+
+    def update(self, obj, values):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key)
+        if refs is None:
+            refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
+        refs.update(zope.app.keyreference.interface.IKeyReference(v)
+            for v in values)
+
+    def remove(self, obj, value):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key)
+        if refs is not None:
+            # raises KeyError when the value isn't found
+            refs.remove(zope.app.keyreference.interface.IKeyReference(value))
+        else:
+            raise KeyError("Object and value pair does not exist")
+
+    def discard(self, obj, value):
+        try:
+            self.remove(obj, value)
+        except KeyError:
+            pass
+
+    def contains(self, obj, value):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key)
+        if refs is not None:
+            return zope.app.keyreference.interface.IKeyReference(value) in refs
+        return False
+
+    def set(self, obj, values):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key)
+        vals = map(zope.app.keyreference.interface.IKeyReference, values)
+        if not vals:
+            if refs is not None:
+                # del
+                del self.references[key]
+        else:
+            if refs is None:
+                refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
+            else:
+                refs.clear()
+            refs.update(vals)
+
+    def get(self, obj):
+        key = zope.app.keyreference.interface.IKeyReference(obj)
+        refs = self.references.get(key, ())
+        for kr in refs:
+            yield kr()
+
+    @property
+    def shortcut_registry(self):
+        return zope.component.queryUtility(
+            zc.extrinsicreference.interfaces.IExtrinsicReferences, 'shortcuts')
+
+    def registerShortcut(shortcut, event):
+        """Subscriber to add an extrinsic reference."""
+        if self.shortcut_registry is not None:
+            # We use raw_target because we don't want a proxy.
+            registry.add(shortcut.raw_target, shortcut)
+
+    def unregisterShortcut(shortcut, event):
+        """Subscriber to remove an extrinsic reference."""
+        if self.shortcut_registry is not None:
+            # We use raw_target because we don't want a proxy.
+            registry.discard(shortcut.raw_target, shortcut)

Deleted: zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.py
===================================================================
--- zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.py	2008-02-16 21:57:20 UTC (rev 83946)
+++ zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.py	2008-02-16 21:58:44 UTC (rev 83947)
@@ -1,108 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Extrinsic references implementation"""
-
-import BTrees
-import persistent
-import zc.extrinsicreference.interfaces
-import zope.app.keyreference.interfaces
-import zope.component
-import zope.interface
-
-
-class ExtrinsicReferences(persistent.Persistent):
-
-    zope.interface.implements(
-        zc.extrinsicreference.interfaces.IExtrinsicReferences)
-
-    # To be usable as an ILocalUtility we have to have these.
-    __parent__ = __name__ = None
-
-    def __init__(self):
-        self.references = BTrees.OOBTree.OOBTree()
-
-    def add(self, obj, value):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key)
-        if refs is None:
-            refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
-        refs.insert(zope.app.keyreference.interface.IKeyReference(value))
-
-    def update(self, obj, values):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key)
-        if refs is None:
-            refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
-        refs.update(zope.app.keyreference.interface.IKeyReference(v)
-            for v in values)
-
-    def remove(self, obj, value):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key)
-        if refs is not None:
-            # raises KeyError when the value isn't found
-            refs.remove(zope.app.keyreference.interface.IKeyReference(value))
-        else:
-            raise KeyError("Object and value pair does not exist")
-
-    def discard(self, obj, value):
-        try:
-            self.remove(obj, value)
-        except KeyError:
-            pass
-
-    def contains(self, obj, value):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key)
-        if refs is not None:
-            return zope.app.keyreference.interface.IKeyReference(value) in refs
-        return False
-
-    def set(self, obj, values):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key)
-        vals = map(zope.app.keyreference.interface.IKeyReference, values)
-        if not vals:
-            if refs is not None:
-                # del
-                del self.references[key]
-        else:
-            if refs is None:
-                refs = self.references[key] = BTrees.OOBTree.OOTreeSet()
-            else:
-                refs.clear()
-            refs.update(vals)
-
-    def get(self, obj):
-        key = zope.app.keyreference.interface.IKeyReference(obj)
-        refs = self.references.get(key, ())
-        for kr in refs:
-            yield kr()
-
-    @property
-    def shortcut_registry(self):
-        return zope.component.queryUtility(
-            zc.extrinsicreference.interfaces.IExtrinsicReferences, 'shortcuts')
-
-    def registerShortcut(shortcut, event):
-        """Subscriber to add an extrinsic reference."""
-        if self.shortcut_registry is not None:
-            # We use raw_target because we don't want a proxy.
-            registry.add(shortcut.raw_target, shortcut)
-
-    def unregisterShortcut(shortcut, event):
-        """Subscriber to remove an extrinsic reference."""
-        if self.shortcut_registry is not None:
-            # We use raw_target because we don't want a proxy.
-            registry.discard(shortcut.raw_target, shortcut)

Deleted: zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.txt
===================================================================
--- zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.txt	2008-02-16 21:57:20 UTC (rev 83946)
+++ zc.extrinsicreference/branches/benji-modernize/src/zc/extrinsicreference/extrinsicreference.txt	2008-02-16 21:58:44 UTC (rev 83947)
@@ -1,136 +0,0 @@
-====================
-Extrinsic References
-====================
-
-Extrinsic registries record a key and one or more values to which they
-refer.  The key and all values must be adaptable to 
-zope.app.keyreference.interfaces.IKeyReference.
-
-    >>> from zc.extrinsicreference import ExtrinsicReferences
-    >>> references = ExtrinsicReferences()
-    >>> references.add(1, 2)
-    Traceback (most recent call last):
-    ...
-    TypeError: ('Could not adapt', 1...
-    >>> from zope import interface, component
-    >>> from zope.app.keyreference.interfaces import IKeyReference
-    >>> class IMyObject(interface.Interface):
-    ...     "An interface for which we register an IKeyReference adapter"
-    ...     id = interface.Attribute("An id unique to IMyObject instances")
-    ...
-    >>> class MyObject(object):
-    ...     interface.implements(IMyObject)
-    ...     _id_counter  = 0
-    ...     @classmethod
-    ...     def _getId(cls):
-    ...         val = cls._id_counter
-    ...         cls._id_counter += 1
-    ...         return val
-    ...     def __init__(self):
-    ...         self.id = self._getId()
-    ...
-    >>> class DummyKeyReference(object):
-    ...     interface.implements(IKeyReference)
-    ...     component.adapts(IMyObject)
-    ...     key_type_id = 'zc.extrinsicreference.doctest'
-    ...     def __init__(self, obj):
-    ...         self.object = obj
-    ...     def __call__(self):
-    ...         """Get the object this reference is linking to.
-    ...         """
-    ...         return self.object
-    ...     def __hash__(self):
-    ...         """Get a unique identifier of the referenced object.
-    ...         """
-    ...         return hash(self.object.id)
-    ...     def __cmp__(self, other):
-    ...         """Compare the reference to another reference.
-    ...         """
-    ...         if self.key_type_id == other.key_type_id:
-    ...             return cmp(self.object.id, other.object.id)
-    ...         return cmp(self.key_type_id, other.key_type_id)
-    ...
-    >>> component.provideAdapter(DummyKeyReference)
-    >>> object1 = MyObject()
-    >>> references.add(object1, 2)
-    Traceback (most recent call last):
-    ...
-    TypeError: ('Could not adapt', 2...
-    >>> value1 = MyObject()
-    >>> value2 = MyObject()
-    >>> references.add(object1, value1)
-    >>> references.add(object1, value2)
-
-Values can be retrieved by their key:
-
-    >>> set(references.get(object1)) == set((value1, value2))
-    True
-
-References can be removed:
-
-    >>> references.remove(object1, value1)
-    >>> list(references.get(object1)) == [value2]
-    True
-
-But if the reference is not registered, removing it raises a KeyError.
-
-    >>> references.remove(object1, value1)
-    Traceback (most recent call last):
-    ...
-    KeyError:...
-    >>> object2 = MyObject()
-    >>> references.remove(object2, value2)
-    Traceback (most recent call last):
-    ...
-    KeyError:...
-
-If you prefer to silently ignore these errors, use `discard`.
-
-    >>> references.discard(object1, value1)
-    >>> references.discard(object2, value2)
-
-Otherwise, you can use `contains` to determine if the reference exists:
-
-    >>> references.contains(object1, value1)
-    False
-    >>> references.contains(object2, value2)
-    False
-    >>> references.contains(object1, value2)
-    True
-
-If a key has no associated values, an empty iterable is returned:
-
-    >>> references.discard(object1, value2)
-    >>> list(references.get(object1))
-    []
-
-Adding a value more than once does not cause the value to be included
-in the result sequence more than once:
-
-    >>> references.add(object1, value1)
-    >>> references.add(object1, value1)
-    >>> list(references.get(object1)) == [value1]
-    True
-
-The `set` method destructively sets the given values for the object.  Repeated
-objects are collapsed to a single instance.
-
-    >>> references.set(object1, (value2, object2, value2, value2, object2))
-    >>> references.contains(object1, value1)
-    False
-    >>> len(list(references.get(object1)))
-    2
-    >>> set(references.get(object1)) == set((value2, object2))
-    True
-    >>> references.set(object1, ())
-    >>> len(list(references.get(object1)))
-    0
-
-The `update` method adds values to the previous values, non-destructively.
-
-    >>> references.add(object1, value1)
-    >>> references.update(object1, (value2, object2, value2))
-    >>> len(list(references.get(object1)))
-    3
-    >>> set(references.get(object1)) == set((value1, value2, object2))
-    True



More information about the Checkins mailing list