改进的zodb持久性
lovely.persistent的Python项目详细描述
持久性
这个包为持久对象提供了一个基类,其优点是 仅当属性真的发生更改时,对象才标记为已更改。
>>> 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()
提交更改后,对象不再处于更改状态。
>>> p._p_changed False
用现有值设置A不将对象置于CANNGD状态。
>>> p.a 1 >>> p.a = 1 >>> p._p_changed False
但是修改a:
>>> p.a = 2 >>> p._p_changed True >>> transaction.commit()>>> p._p_changed False
删除属性也会使对象处于更改状态。
>>> del p.a >>> p._p_changed True
特殊特性
特殊属性实现也可以工作。为了显示这一点,我们使用 zope.schema中的FieldProperties。
>>> 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()
默认值。
>>> myFace.eyesOpen True
验证。
>>> myFace.eyesOpen = 'not always' Traceback (most recent call last): ... WrongType: ('not always', <type 'bool'>)
注意,设置为默认值不会更改对象。
>>> transaction.commit() >>> myFace.eyesOpen = True >>> myFace._p_changed False>>> transaction.commit() >>> myFace.eyesOpen = False >>> myFace._p_changed True
可爱的变化。持久性
2007年12月10日0.1.1
- 转到zope.org
2007/06/19 0.1.0a1
- 将zodb添加到依赖项中
- 增加了对fieldproperties的支持