Skip to main content

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']

>>> root.uuid = object()
Traceback (most recent call last):
...
AssertionError: arg <object object at ...> does not match <class 'uuid.UUID'>

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.5.0
-------------

-add ``insertbefore`` and ``insertafter`` function.
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 (svn)
-------------

-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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zodict-1.5.0.tar.gz (8.0 kB view details)

Uploaded Source

File details

Details for the file zodict-1.5.0.tar.gz.

File metadata

  • Download URL: zodict-1.5.0.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for zodict-1.5.0.tar.gz
Algorithm Hash digest
SHA256 3957ee0e9f560430e4bd8ca11313b37dd43e68a7d84a9d9d3084b4888029961f
MD5 0f88b9c9bf8ab26aa7f73ba570f8373b
BLAKE2b-256 b8368d750e5159dd9996af3dc3fa8e26a67fdca08e3971fd6c718a96dfcfcff7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page