zope.interface compliant ordered dictionary.
Project description
zodict
Ordered dictionary which implements the corresponding zope.interface.common.mapping interface
>>> from zope.interface.common.mapping import IFullMapping >>> from zodict import zodict >>> zod = zodict() >>> IFullMapping.providedBy(zod) True
Node
This is a zodict which provides a location. Location the zope way means each item in the node-tree knows its parent and its own name
>>> from zope.location.interface import ILocation >>> from zodict.node import Node >>> root = Node('root') >>> ILocation.providedBy(Node) True >>> root['child'] = Node() >>> root['child'].path ['root', 'child'] >>> child = root['child'] >>> child.__name__ 'child' >>> child.__parent__ <Node object 'root' at ...>
The filtereditems function
>>> from zope.interface import Interface >>> from zope.interface import alsoProvides >>> class IMarker(Interface): pass >>> alsoProvides(root['child']['subchild'], IMarker) >>> IMarker.providedBy(root['child']['subchild']) True >>> for item in root['child'].filtereditems(IMarker): ... print item.path ['root', 'child', 'subchild']
UUID related operations on Node
>>> uuid = root['child']['subchild'].uuid >>> uuid UUID('...') >>> root.node(uuid).path ['root', 'child', 'subchild'] >>> root.uuid = uuid Traceback (most recent call last): ... ValueError: Given uuid was already used for another Node >>> import uuid >>> newuuid = uuid.uuid4() >>> root.uuid = newuuid >>> root['child'].node(newuuid).path ['root']
Node insertion (an insertafter function exist as well)
>>> root['child1'] = Node() >>> root['child2'] = Node() >>> node = Node('child3') >>> root.insertbefore(node, root['child2']) >>> root.printtree() <class 'zodict.node.Node'>: root <class 'zodict.node.Node'>: child1 <class 'zodict.node.Node'>: child3 <class 'zodict.node.Node'>: child2
Nodes can not be moved. Therefor you have to read it, delete it from tree and add it elsewhere again
>>> node = root['child2'] >>> del root['child2'] >>> root.values() [<Node object 'child1' at ...>, <Node object 'child3' at ...>] >>> root.insertbefore(node, root['child1']) >>> root.printtree() <class 'zodict.node.Node'>: root <class 'zodict.node.Node'>: child2 <class 'zodict.node.Node'>: child1 <class 'zodict.node.Node'>: child3
Changes
Version 1.6.0 (svn)
-remove the traverser module.
- -improve insertbefore and insertafter a little bit.
rnix, 2009-11-28
- -add index Attribute to Node. Allows access to the internal
_index attribute. rnix, 2009-11-28
- -remove @accept and @return decorators. Just overhead.
rnix, 2009-11-28
Version 1.5.0
- -add insertbefore and insertafter function to Node.
rnix, 2009-11-27
- -fix printtree if Node.__name__ is None.
rnix, 2009-11-20
- -add printtree debug helper function to Node.
rnix, 2009-11-09
- -define own Traverser interface and reduce dependencies.
rnix, 2009-10-28
- -removed import of tests from zodicts __init__. this caused import errors
if interlude wasnt installed. jensens, 2009-07-16
Version 1.4.0
- -Don’t allow classes as values of a Node. Attribute __name__
conflicts. jensens, 2009-05-06
- -repr(nodeobj) now returns the real classname and not fixed
<Node object this helps a lot while testing and using classes inheriting from Node! jensens, 2009-05-06
- -Make tests run with python setup.py test.
Removed superflous dependency on zope.testing. jensens, 2009-05-06
Version 1.3.3
-Fix ITraverser interface import including BBB.
Version 1.3.2
- -Add root property to Node.
thet, 2009-04-24
Version 1.3.1
- -Add __delitem__ function to Node.
rnix, 2009-04-16
Version 1.3
- -Add uuid Attribute and node function to Node.
rnix, 2009-03-23
Version 1.2
- -Add filtereditems function to Node.
rnix, 2009-03-22
Version 1.1
- -Add INode interface and implementation.
rnix, 2009-03-18
Credits
- -Written by Robert Niederreiter <rnix@squarewave.at>
2009-03-17
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.