Skip to main content

A ZODB folder implementation with object events

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

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

repoze.folder-0.4.tar.gz (24.5 kB view details)

Uploaded Source

File details

Details for the file repoze.folder-0.4.tar.gz.

File metadata

  • Download URL: repoze.folder-0.4.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for repoze.folder-0.4.tar.gz
Algorithm Hash digest
SHA256 592c71615180a9f29a981dc4296ecbc8b7394811ff651681e02b1960a6ef0d57
MD5 6d4f782147103eff11845edf803c4844
BLAKE2b-256 3484f01bb7fc2df7bcb6face2c0eabf361e068f77981ef077a24abb5f7156863

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