外键引用注册表
项目描述
外键引用
有关详细信息,请参阅 src/zc/extrinsicreference/README.txt。
详细文档
外键引用
外键引用注册表记录一个键和一个或多个引用的值。键和所有值都必须可适应 zope.app.keyreference.interfaces.IKeyReference。
>>> import zc.extrinsicreference >>> references = zc.extrinsicreference.ExtrinsicReferences() >>> references.add(1, 2) Traceback (most recent call last): ... TypeError: ('Could not adapt', 1... >>> from zope import interface, component >>> from zope.app.keyreference.interfaces import IKeyReference >>> class IMyObject(interface.Interface): ... "An interface for which we register an IKeyReference adapter" ... id = interface.Attribute("An id unique to IMyObject instances") ... >>> class MyObject(object): ... interface.implements(IMyObject) ... _id_counter = 0 ... @classmethod ... def _getId(cls): ... val = cls._id_counter ... cls._id_counter += 1 ... return val ... def __init__(self): ... self.id = self._getId() ... >>> class DummyKeyReference(object): ... interface.implements(IKeyReference) ... component.adapts(IMyObject) ... key_type_id = 'zc.extrinsicreference.doctest' ... def __init__(self, obj): ... self.object = obj ... def __call__(self): ... """Get the object this reference is linking to. ... """ ... return self.object ... def __hash__(self): ... """Get a unique identifier of the referenced object. ... """ ... return hash(self.object.id) ... def __cmp__(self, other): ... """Compare the reference to another reference. ... """ ... if self.key_type_id == other.key_type_id: ... return cmp(self.object.id, other.object.id) ... return cmp(self.key_type_id, other.key_type_id) ... >>> component.provideAdapter(DummyKeyReference) >>> object1 = MyObject() >>> references.add(object1, 2) Traceback (most recent call last): ... TypeError: ('Could not adapt', 2... >>> value1 = MyObject() >>> value2 = MyObject() >>> references.add(object1, value1) >>> references.add(object1, value2)
可以通过其键检索值
>>> set(references.get(object1)) == set((value1, value2)) True
可以删除引用
>>> references.remove(object1, value1) >>> list(references.get(object1)) == [value2] True
但是,如果引用未注册,则删除它将引发 KeyError。
>>> references.remove(object1, value1) Traceback (most recent call last): ... KeyError:... >>> object2 = MyObject() >>> references.remove(object2, value2) Traceback (most recent call last): ... KeyError:...
如果您希望静默忽略这些错误,请使用 discard。
>>> references.discard(object1, value1) >>> references.discard(object2, value2)
否则,您可以使用 contains 确定引用是否存在
>>> references.contains(object1, value1) False >>> references.contains(object2, value2) False >>> references.contains(object1, value2) True
如果键没有关联的值,则返回一个空的可迭代对象
>>> references.discard(object1, value2) >>> list(references.get(object1)) []
重复添加值不会导致该值在结果序列中出现多次。
>>> references.add(object1, value1) >>> references.add(object1, value1) >>> list(references.get(object1)) == [value1] True
《set》方法以破坏性方式为对象设置给定的值。重复的对象将被折叠成一个实例。
>>> references.set(object1, (value2, object2, value2, value2, object2)) >>> references.contains(object1, value1) False >>> len(list(references.get(object1))) 2 >>> set(references.get(object1)) == set((value2, object2)) True >>> references.set(object1, ()) >>> len(list(references.get(object1))) 0
《update》方法以非破坏性方式向之前的值添加值。
>>> references.add(object1, value1) >>> references.update(object1, (value2, object2, value2)) >>> len(list(references.get(object1))) 3 >>> set(references.get(object1)) == set((value1, value2, object2)) True
变更
0.3.0 (2009-08-27)
修复0.2.0重构中引入的错误
停止从ZCML中引用extrinsicreference模块。代码现在在< span class="docutils literal">__init__.py中。
撤销registerShortcut和unregisterShortcut的更改。这两个函数是track_shortcuts.zcml中的处理程序。
添加更多包基础设施,例如此文件。
0.2.0 (2009-08-26)
重构了现有的稳定代码。
作为egg的初始版本发布。
项目详情
关闭
zc.extrinsicreference-0.3.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ecccdd1f928a3c14b3fe18b50ba59aecf4fc67fe0ae580970bcac238f6a6cca |
|
MD5 | 04f411a2246e82621f6f655eb3a3994b |
|
BLAKE2b-256 | 1ba0eebd3f076177c8b52389ae6b38d3c65c682e2ba95bb817efc35a9515c513 |