A ZODB folder implementation with object events
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.
Folder objects are based on BTree code, so as long as you persist them, the folder should be able to contain many objects efficiently.
- Add support for PyPy.
- Add support for Python 3.2, 3.3, and 3.4.
- Add support for testing on Travis.
- Drop support for Python 2.4 and 2.5.
This release is the last which will maintain support for Python 2.4 / Python 2.5.
- Add support for continuous integration using tox and jenkins.
- Add ‘setup.py dev’ alias (runs setup.py develop plus installs nose and coverage).
- Move to GitHub.
- Fix iteration bug due to use of _order as tuple.
- Fixed persistence bugs in ordering support when adding or removing items.
- Add support for ordering items in a folder.
- Make remove return the removed object.
- Add pop method.
- 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.
- 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).
- Fix backwards compatibility foul (near self._num_objects.change(1): AttributeError: 'NoneType' object has no attribute 'change').
- 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 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).
- Yeah. 0.3.1 was another brownbag, as we need to try to decode ASCII to unicode before we use the utf-8 decoding.
- Mistakenly removed __parent__ and __name__ attributes from folder implementation, making 0.3 a brownbag.
- 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.
- Remove __init__ from IFolder interface.
- Update Sphinx docs, using interfaces
- Add folder __name__ to repr and str of folder in output.
- Initial release.