improved ZODB persistence
Project description
Persistent
This package provides a base class for persistent objects with the advantage that the object is only marked as changed if an attribute has really changed.
>>> import transaction >>> from ZODB.tests.util import DB>>> from lovely import persistent>>> p = LovelyPersistent() >>> p._p_changed False>>> p.a = 1 >>> db = DB() >>> conn = db.open() >>> conn.root()['p'] = p >>> transaction.commit()
After commiting the changes the object is no longer in changed state.
>>> p._p_changed False
Setting a with its existing value doesn’t put the object in cahnged state.
>>> p.a 1 >>> p.a = 1 >>> p._p_changed False
But modifying a :
>>> p.a = 2 >>> p._p_changed True >>> transaction.commit()>>> p._p_changed False
Deleting an attribute also put the object into changed state.
>>> del p.a >>> p._p_changed True
Special Properties
Special property implementations do work too. To show this we use the fieldproperties from zope.schema.
>>> from zope.schema.fieldproperty import FieldProperty >>> from zope import schema, interface >>> class IMyFace(interface.Interface): ... eyesOpen = schema.Bool(default=True, required=False)>>> class MyFace(persistent.Persistent): ... eyesOpen = FieldProperty(IMyFace['eyesOpen'])>>> persistent.tests.MyFace = MyFace >>> MyFace.__module__ = persistent.tests.setUp.__module__ >>> myFace = conn.root()['myFace'] = MyFace() >>> transaction.commit()
Default values.
>>> myFace.eyesOpen True
Validation.
>>> myFace.eyesOpen = 'not always' Traceback (most recent call last): ... WrongType: ('not always', <type 'bool'>)
Note, setting to default value does not change the object.
>>> transaction.commit() >>> myFace.eyesOpen = True >>> myFace._p_changed False>>> transaction.commit() >>> myFace.eyesOpen = False >>> myFace._p_changed True
Changes in lovely.persistent
2007/12/10 0.1.1
moved to zope.org
2007/06/19 0.1.0a1
added zodb to dependencies
added support for fieldproperties
Download
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.
Source Distribution
Built Distribution
Hashes for lovely.persistent-0.1.1-py2.4.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 456f00bcbf7832391bd28d55112e30f11529775fc09b4990e53efa9a6b2a02ec |
|
MD5 | 04135887f1823fb30bdae96f48425a53 |
|
BLAKE2b-256 | dccc20e1765405756bef44b1a447424263478ef2cb0916ef549806d515682899 |