Metadata-Version: 1.0
Name: repoze.folder
Version: 0.4
Summary: A ZODB folder implementation with object events
Home-page: http://www.repoze.org
Author: Agendaless Consulting
Author-email: repoze-dev@lists.repoze.org
License: BSD-derived (http://www.repoze.org/LICENSE.txt)
Description: repoze.folder
        =============
        
        ``repoze.folder`` provides a barebones ZODB folder implementation with
        object event support.  Folders have a dictionary-like interface and
        emit "object events" on the addition and removal of objects when
        certain methods of this interface are exercised.
        
        Using a folder::
        
        >>> from repoze.folder import Folder
        >>> from persistent import Persistent
        >>> folder = Folder()
        >>> class Child(Persistent):
        >>>    pass
        >>> folder['child1'] = Child()
        >>> folder['child2'] = Child()
        >>> list(folder.keys())
        ['child1', 'child2']
        >>> folder.get('child1')
        <Child object at ELIDED>
        >>> del folder['child1']
        >>> list(folder.keys())
        ['child2']
        
        Folder objects are based on BTree code, so as long as you persist
        them, the folder should be able to contain many objects efficiently.
        
        
        0.4 (2009/06/15)
        ================
        
        - 100% test coverage.
        
        - Add an ``add`` method that does what ``__setitem__`` does.  It also
        provides a flag named ``send_events``, which by default is True.  If
        it is False when ``add` is called, folder events
        (``IObjectWillBeAddedEvent`` and ``IObjectAddedEvent``) will not be
        sent.
        
        - Add a ``remove`` method that does what ``__delitem__`` does.  It
        also provides a flag named ``send_events``, which by default is
        True.  If it is False when ``add` is called, folder events
        (``IObjectWillBeRemovedEvent`` and ``IObjectRemovedEvent``) will not
        be sent.
        
        0.3.5 (2009/1/8)
        ================
        
        - Add a ``BTrees.Length`` object to folders that don't already have
        one during ``__setitem__`` and ``__delitem__`` (this is an
        "evolution" step; having a Length object is useful for performance
        reasons).
        
        0.3.4 (2009/1/8)
        ================
        
        - Fix backwards compatibility foul (near
        ``self._num_objects.change(1)``: ``AttributeError: 'NoneType' object
        has no attribute 'change'``).
        
        0.3.3 (2009/1/6)
        ================
        
        - Add tests for ``unicodify`` and make docs about to-Unicode
        convenience conversion from byte strings (and error messages)
        slightly clearer.
        
        - Now no matter what is passed to the repoze.folder as constructor, we
        try to turn it into an OOBTree (before it was set as ``data`` on the
        instance without any conversion).
        
        - A ``__len__`` method was added to ``repoze.folder.Folder``
        instances.  It returns the number of subobjects in the folder.
        
        - A ``_num_objects`` attribute is set onto newly created
        ``repoze.folder.Folder`` instances.  This is a
        ``BTrees.Length.Length`` object.  We manage this length object in
        order to supply a return value for the ``__len__`` method instead of
        using the folder's underlying OOBTree.__len__ method (querying a
        btree for length can be arbitrarily expensive).  A ``_num_objects``
        class attribute was added equalling None to provide a backward
        compatibility cue for already-persisted objects which do not have a
        meaningful Length attribute.
        
        - The implementation no longer concerns itself with advertising a
        modified event (``IObjectModifiedEvent``).
        
        0.3.2 (2008/12/13)
        ==================
        
        - Yeah.  0.3.1 was another brownbag, as we need to try to decode ASCII
        to unicode before we use the utf-8 decoding.
        
        0.3.1 (2008/12/13)
        ===================
        
        - Mistakenly removed ``__parent__`` and ``__name__`` attributes from
        folder implementation, making 0.3 a brownbag.
        
        0.3 (2008/12/13)
        ================
        
        Backwards Incompatibilities
        ---------------------------
        
        - When a new object is added using ``__setitem__`` with the same name
        as an existing object, a KeyError is now raised rather than the item
        being silently replaced.
        
        - API methods accepting a ``name`` (``__setitem__``, ``__getitem__``,
        ``get``, ``__contains__``, and ``__delitem__``) now attempt to
        decode bytestrings to Unicode using the utf-8 encoding before
        performing the action the method implies.
        
        - Previously, it was possible to store either an ASCII bytestring or a
        Unicode object as a key value.  Now all key values are converted to
        Unicode before being stored.
        
        0.2.1 (2008/10/31)
        ==================
        
        - Remove ``__init__`` from IFolder interface.
        
        0.2 (2008/10/22)
        ================
        
        - Update sphinx docs, using interfaces
        
        - Add folder __name__ to repr and str of folder in output.
        
        0.1 (2008/10/13)
        ================
        
        - Initial release.
        
Keywords: web wsgi zope
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware
