zope.keyreference

소프트웨어 스크린 샷:
zope.keyreference
소프트웨어 정보:
버전: 3.6.4
업로드 날짜: 15 Apr 15
라이센스: 무료
인기: 1

Rating: nan/5 (Total Votes: 0)

zope.keyreference 안정 비교 및​​ 해시를 지원 객체 참조를 제공합니다.
영구 객체에 대한 키 참조
zope.keyreference.persistent.KeyReferenceToPersistent 영구 객체에 대한 zope.keyreference.interfaces.IKeyReference 참조를 제공합니다.
의 예를 살펴 보자. 첫째, 우리는 데이터베이스의 일부 영속 객체를 생성 할 것이다 :
& NBSP; >>>에서 ZODB.MappingStorage 수입 DB
& NBSP; >>> 수입 거래
& NBSP; >>> persistent.mapping 수입 PersistentMapping에서
& NBSP; >>> dB = DB ()
& NBSP; >>> CONN = db.open ()
& NBSP; >>> 루트 = conn.root ()
& NBSP; >>> 루트 [ 'OB1'] = PersistentMapping ()
& NBSP; >>> 루트 [ 'OB2'] = PersistentMapping ()
& NBSP; >>> transaction.commit ()
그 다음 우리는 몇 가지 중요한 참조를 만들 것이다 :
& NBSP; >>> zope.keyreference.persistent 수입 KeyReferenceToPersistent에서
& NBSP; >>> 키 1 = KeyReferenceToPersistent (루트 [ 'OB1'])
& NBSP; >>> 키 2 = KeyReferenceToPersistent (루트 [ 'OB2'])
우리는 개체를 얻을 수있는 키를 호출 할 수 있습니다 :
& NBSP; >>> 키 1 () 루트 [ 'OB1'], 키 2 ()가 루트 [ 'OB2']
& NBSP; (참, 참)
같은 개체에 새로운 키는 이전과 동일하다 :
& NBSP; >>> KeyReferenceToPersistent (루트 [ 'OB1']) == 키 1
& NBSP 트루 (True)
동일한 해시를 가지고 :
& NBSP; >>> 해시 (KeyReferenceToPersistent (루트 [ 'OB1'])) == 해시 (키 1)
& NBSP 트루 (True)
다른 키 참조 구현은 자신의 키 타입 ID로 차이가있다. 키 참조는 모든 유형의 특정 정보에 처음으로 자신의 키 유형과 두 번째 정렬해야합니다 :
& NBSP; >>> zope.interface 수입 구현에서
& NBSP; >>> zope.keyreference.interfaces는 IKeyReference를 가져올에서
& NBSP; >>> 클래스 DummyKeyReference (객체) :
& NBSP; ... 구현 (IKeyReference)
& NBSP; ... key_type_id = 'zope.app.keyreference.object'
& NBSP; ... 데프 __init __ (자기, OBJ) :
& NBSP; ... self.object = OBJ
& NBSP; ... 데프 __cmp __ (자기, 기타) :
& NBSP; ... 경우 self.key_type_id == other.key_type_id :
& NBSP; ... 반환 CMP (self.object, other.object)
& NBSP; ... 반환 CMP (self.key_type_id, other.key_type_id)
& NBSP; >>> dummy_key1 = DummyKeyReference (객체 ())
& NBSP; >>> dummy_key2 = DummyKeyReference (객체 ())
& NBSP; >>> dummy_key3 = DummyKeyReference (객체 ())
& NBSP; >>> 키 = [키 1 dummy_key1, dummy_key2, 키 2, dummy_key3]
& NBSP; >>> keys.sort ()
& NBSP; >>> key_type_ids = [key.key_type_id 키에 키]
& NBSP; >>> key_type_ids [0 : 3] 백작 ( 'zope.app.keyreference.object')
& NBSP 3
. & NBSP; >>> key_type_ids [3] ( 'zope.app.keyreference.persistent')를 계산
& NBSP; 2
우리는 데이터베이스에 대한 참조를 저장하는 키 것이다 :
& NBSP; >>> 루트 [ '키 1'] = 키 1
& NBSP; >>> 루트 [ '키 2'] = 키 2
다시 오브젝트를 저장하는 키를 사용
& NBSP; >>> 루트 [KEY1] = 루트 [ 'OB1']
& NBSP; >>> 루트 [키 2] = 루트 [ 'OB2']
& NBSP; >>> transaction.commit ()
이제 우리는 또 다른 연결을 열 것입니다 :
& NBSP; >>> CONN2 = db.open ()
그리고 우리는 개체를 찾기 위해 키를 사용할 수 있는지 확인합니다 :
& NBSP; >>> ROOT2 = conn2.root ()
& NBSP; >>> 키 1 = ROOT2 [ 'KEY1']
& NBSP; >>> ROOT2 [키 1] ROOT2이다 'OB1']
& NBSP 트루 (True)
& NBSP; >>> 키 2 = ROOT2 [ '키 2']
& NBSP; >>> ROOT2 [키 2가] ROOT2이다 'OB2']
& NBSP 트루 (True)
우리는 또한 개체를 얻을 수있는 키를 호출 할 수 있습니다 :
& NBSP; >>> 키 1 () ROOT2이다 'OB1']
& NBSP 트루 (True)
& NBSP; >>> 키 2 ()가 ROOT2이다 'OB2']
& NBSP 트루 (True)
우리는 아직 저장되지 않은 개체의 키 참조를 얻을 수 없습니다
& NBSP; >>> KeyReferenceToPersistent (PersistentMapping ())
& NBSP; ... # doctest가 : + 줄임표
& NBSP; 역 추적 (가장 최근 통화 마지막) :
& NBSP; ...
& NBSP; 아직 아니지만 ...
우리는 아직 아니지만 오류가 발생합니다. 이것은 우리가 나중에 키 참조를 얻을 수있을 수 있음을 나타냅니다.
그들은 ZODB.interfaces.IConnection에 어댑터가있는 경우 우리는 저장되지 않은 객체에 대한 참조를 얻을 수 있습니다. 연결에 대한 추가 방법은 개체에게 기준을 계산하기에 충분한 정보 인 오브젝트 ID를 제공하는 데 사용된다. 이를 확인하기 위해, 우리는 바보 같은 방법으로 IConnection 준수하는 객체를 생성합니다 :
& NBSP; >>> 수입 지속
& NBSP; >>> ZODB.interfaces는 IConnection를 가져올에서
& NBSP; >>> 클래스 C (persistent.Persistent) :
& NBSP; ... 데프 __conform __ (자기, IFACE) :
& NBSP; ... IFACE는 IConnection 인 경우 :
& NBSP; ... 반환 CONN2
& NBSP; >>> OB3 = C ()
& NBSP; >>> KEY3 = KeyReferenceToPersistent (OB3)
& NBSP; >>> transaction.abort ()
분쟁 해결
ZODB / ConflictResolution.txt에서 설명한 바와 같이 충돌 해결하는 동안, 영속 객체에 대한 참조 실제로 ZODB.ConflictResolution.PersistentReference의 인스턴스입니다. 이 KeyReferenceToPersistent에 대한 두 가지 방법으로 관련입니다. 첫째, 클래스의 섬세함을 설명 : 그것은 persistent.Persistent에서 상속하지 않습니다. 이 그랬다면, 그냥 그 PersistentReference는 독립에, 분쟁 해결에 사용할 수 없습니다.
둘째, __hash__과 __cmp__ 방법의 코드 중 일부를 설명합니다. 이러한 방법은 persistent.Persistent 개체,하지만 PersistentReference 개체를 처리하지. 이 동작하지 않고, 키 또는 세트 구성원으로 KeyReferenceToPersistent를 사용하는 등 고전 ZODB BTrees 같은 개체는 충돌을 해결 할 수 없습니다. 비록 특수 코드를, 경우에 KeyReferenceToPersistent는 안정적 그렇게 할 수 없기 때문에 충돌 해결 과정 및 해시 비교를 거부한다.
__hash__는 분쟁 해결 동안 상대적으로 거의 작동하지 않습니다 : 만 multidatabase 참조하십시오. 다음은 몇 가지 예입니다.
& NBSP; >>> ZODB.ConflictResolution 수입 PersistentReference에서
& NBSP; >>> 데프 공장 (REF) :
& NBSP; ... 입술 = KeyReferenceToPersistent .__ 새로운 __ (
& NBSP; ... KeyReferenceToPersistent 심판)
& NBSP; ... res.object = 심판
& NBSP; ... 반환 입술
& NBSP; ...
& NBSP; >>> 해시 (공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 ')))) # 전형적인 레퍼런스
& NBSP; 역 추적 (가장 최근 통화 마지막) :
& NBSP; ...
& NBSP;은 ValueError :이 시간에 데이터베이스 이름을 사용할 수 없습니다
& NBSP; >>> 부울 (해시 (공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])))) # multidatabase
& NBSP 트루 (True)
이 KeyReferenceToPersistent가 종종 PersistentMapping 같은 클래스에 대한 분쟁 해결을 방해하는 것을 의미합니다.
한 개체가 multidatabase 기준이고, 다른하지 않는 한 작동 __cmp__. 다음은 몇 가지 예입니다.
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))))
& NBSP 0
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... ( '다른 OID', '클래스 메타'))))
& NBSP; -1
& NBSP; >>> CMP (공장 (PersistentReference ( 'OID')),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))))
& NBSP 0
& NBSP; >>> CMP (공장 (PersistentReference ( 'OID')),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))))
& NBSP 0
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])))
& NBSP 0
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... [ 'N'( '데이터베이스', 'OID')])))
& NBSP 0
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... [ 'm'( '다른 데이터베이스', 'OID', '클래스 메타 데이터')])))
& NBSP; -1
& NBSP; >>> CMP (공장 (PersistentReference (
& NBSP; ... [ 'm'( '데이터베이스', 'OID', '클래스 메타 데이터')])),
& NBSP; ... 공장 (PersistentReference (
& NBSP; ... ( "OID", "클래스 메타 '))))
& NBSP; 역 추적 (가장 최근 통화 마지막) :
& NBSP; ...
& NBSP;은 ValueError가 : 정렬 안정적으로 할 수 없습니다
위치 기반 연결 어댑터
함수 zope.keyreference.connectionOfPersistent 간단한 위치 기반 추론을 사용하여 연결 개체를 맞 춥니 다. 이는 물체가 연결되어 __parent__이 있는지 체크 :
& NBSP; >>> zope.keyreference.persistent 수입 connectionOfPersistent에서
& NBSP; >>> OB3 = PersistentMapping ()
& NBSP; >>> 인쇄 connectionOfPersistent (OB3)
& NBSP; 없음
& NBSP; >>> OB3 .__ parent__ = ROOT2 [ 'OB1']
& NBSP; >>> connectionOfPersistent은 (OB3) CONN2입니다
& NBSP 트루 (True)

이 릴리스의 새로운 기능입니다 :

이 테스트 종속성에서 zope.testing의 제거에 의해 깨진 테스트를 수정 : 그것을 필요로 ZODB3 모듈을 피할 수 있습니다.

이 요구 사항 :

이 파이썬

개발자의 기타 소프트웨어 Zope Corporation and Contributors

zope.app.rotterdam
zope.app.rotterdam

14 Apr 15

zope.dublincore
zope.dublincore

12 May 15

zope.tal
zope.tal

11 May 15

코멘트 zope.keyreference

댓글을 찾을 수 없습니다
코멘트를 추가
이미지를 켜십시오!