zope.keyreference

Software screenshot:
zope.keyreference
Software ətraflı:
Version: 3.6.4
Tarixi Upload: 15 Apr 15
Lisenziya: Pulsuz
Məşhurluq: 34

Rating: nan/5 (Total Votes: 0)

zope.keyreference sabit müqayisə və hashes dəstək obyekt istinadlar təmin edir.
Davamlı obyektləri üçün Açar References
zope.keyreference.persistent.KeyReferenceToPersistent davamlı obyektləri üçün zope.keyreference.interfaces.IKeyReference istinad edir.
Nin Məsələn baxaq. Birincisi, biz bir verilənlər bazası bəzi davamlı obyektləri yaratmaq lazımdır:
& Nbsp; >>> olan ZODB.MappingStorage idxal DB
& Nbsp; >>> idxal əməliyyat
& Nbsp; >>> persistent.mapping idxal PersistentMapping dən
& Nbsp; >>> db = DB ()
& Nbsp; >>> Pak = db.open ()
& Nbsp; >>> kök = conn.root ()
& Nbsp; >>> kök ['ob1'] = PersistentMapping ()
& Nbsp; >>> kök ['ob2'] = PersistentMapping ()
& Nbsp; >>> transaction.commit ()
Sonra bəzi əsas istinadlar yaratmaq lazımdır:
& Nbsp; >>> zope.keyreference.persistent idxal KeyReferenceToPersistent dən
& Nbsp; >>> key1 = KeyReferenceToPersistent (root ['ob1'])
& Nbsp; >>> key2 = KeyReferenceToPersistent (root ['ob2'])
Biz obyektlərin almaq üçün düymələri zəng edə bilərsiniz:
& Nbsp; >>> key1 () kök ['ob1'], key2 () kök ['ob2']
& Nbsp; (True, True)
Eyni obyektlərin Yeni düymələri köhnə bərabərdir:
& Nbsp; >>> KeyReferenceToPersistent (root ['ob1']) == key1
& Nbsp; True
və eyni hashes var:
& Nbsp; >>> hash (KeyReferenceToPersistent (root ['ob1'])) == hash (key1)
& Nbsp; True
Digər əsas istinad tətbiq onların əsas növü id ilə fərqlənir. Açar istinadlar hər hansı bir növü xüsusi informasiya ilk onların əsas növü və ikinci sort lazımdır:
& Nbsp; >>> zope.interface idxal həyata keçirir dən
& Nbsp; >>> zope.keyreference.interfaces IKeyReference idxal olan
& Nbsp; >>> sinif DummyKeyReference (obyektin):
& Nbsp; ... həyata keçirir (IKeyReference)
& Nbsp; ... key_type_id = 'zope.app.keyreference.object'
& Nbsp; ... def __init __ (self, obj):
& Nbsp; ... self.object = obj
& Nbsp; ... def __cmp __ (özünü digər):
& Nbsp; ... əgər self.key_type_id == other.key_type_id:
& Nbsp; ... qaytarılması cmp (self.object, other.object)
& Nbsp; ... qaytarılması cmp (self.key_type_id, other.key_type_id)
& Nbsp; >>> dummy_key1 = DummyKeyReference (obyekt ())
& Nbsp; >>> dummy_key2 = DummyKeyReference (obyekt ())
& Nbsp; >>> dummy_key3 = DummyKeyReference (obyekt ())
& Nbsp; >>> düymələri = [key1, dummy_key1, dummy_key2, key2, dummy_key3]
& Nbsp; >>> keys.sort ()
& Nbsp; >>> key_type_ids = [key.key_type_id düymələri əsas]
& Nbsp; >>> key_type_ids [0: 3] .count (zope.app.keyreference.object)
& Nbsp; 3
. & Nbsp; >>> key_type_ids [3] (zope.app.keyreference.persistent) sayı
& Nbsp; 2
Biz bazasında əsas istinadlar saxlamaq lazımdır:
& Nbsp; >>> kök ['key1'] = key1
& Nbsp; >>> kök ['key2'] = key2
və yenidən obyektlərin saxlamaq üçün tuşlarını istifadə edin:
& Nbsp; >>> root [key1] = root ['ob1']
& Nbsp; >>> root [key2] = root ['ob2']
& Nbsp; >>> transaction.commit ()
İndi biz bir keçid açmaq lazımdır:
& Nbsp; >>> conn2 = db.open ()
Və biz obyektlərin baxmaq üçün düymələrindən istifadə edə bilərsiniz ki, yoxlamaq:
& Nbsp; >>> root2 = conn2.root ()
& Nbsp; >>> key1 = root2 ['key1']
& Nbsp; >>> root2 [key1] root2 edir ['ob1']
& Nbsp; True
& Nbsp; >>> key2 = root2 ['key2']
& Nbsp; >>> root2 [key2] root2 edir ['ob2']
& Nbsp; True
və biz də obyektlərin almaq üçün açarları zəng edə bilərsiniz ki,
& Nbsp; >>> key1 () root2 edir ['ob1']
& Nbsp; True
& Nbsp; >>> key2 () root2 edir ['ob2']
& Nbsp; True
Biz hələ qeyd edilməyib bir obyekt üçün əsas istinad ala bilməz:
& Nbsp; >>> KeyReferenceToPersistent (PersistentMapping ())
& Nbsp; ... # doctest: + Ellips
& Nbsp; Traceback (ən son zəng, son):
& Nbsp; ...
& Nbsp; NotYet: ...
Biz NotYet səhv almaq unutmayın. Bu sonra əsas istinad əldə edə bilər ki, göstərir.
Onlar ZODB.interfaces.IConnection bir adapter varsa, biz Kaydedilmemiş obyektlərin istinad əldə edə bilərsiniz. əlaqədar əlavə metodu obyekt istinad hesablamaq üçün kifayət qədər məlumat olan bir obyekt id vermək üçün istifadə olunacaq. Bu görmək üçün, biz bir silly şəkildə IConnection uyğun bir obyekt yaratmaq lazımdır:
& Nbsp; >>> idxal davamlı
& Nbsp; >>> ZODB.interfaces IConnection idxal olan
& Nbsp; >>> sinif C (persistent.Persistent):
& Nbsp; ... def __conform __ (özünü, iFace):
& Nbsp; ... iFace IConnection əgər:
& Nbsp; ... qaytarılması conn2
& Nbsp; >>> ob3 = C ()
& Nbsp; >>> key3 = KeyReferenceToPersistent (ob3)
& Nbsp; >>> transaction.abort ()
Münaqişələrin həlli
ZODB / ConflictResolution.txt müzakirə kimi münaqişələrin həlli zamanı, davamlı obyektlərin istinadlar həqiqətən ZODB.ConflictResolution.PersistentReference hallarda var. Bu KeyReferenceToPersistent üçün iki yolla uyğun deyil. Birincisi, bu, sinif bir incelik izah edir: bu persistent.Persistent varis deyil. Bunu, bu, yalnız onun PersistentReference stand-in münaqişənin həlli üçün mövcud ola bilməz.
İkincisi, __hash__ və __cmp__ üsulları kodu bəzi izah edir. Bu metodlar yalnız persistent.Persistent obyektlərin, lakin PersistentReference obyektlərin idarə. Bu davranış olmadan, düymələri və ya set üzvləri KeyReferenceToPersistent istifadə ki, belə klassik ZODB BTrees kimi obyektlərin, münaqişələrin həll etmək iqtidarında olacaq. Hətta xüsusi kodu ilə, bəzi hallarda KeyReferenceToPersistent etibarlı belə edə bilməz, çünki münaqişənin həlli zamanı müqayisə və hash imtina edəcək.
__hash__ münaqişənin həlli zamanı nisbətən nadir hallarda işləyəcək: yalnız multidatabase referanslar üçün. Burada nümunələri bir neçə var.
& Nbsp; >>> ZODB.ConflictResolution idxal PersistentReference dən
& Nbsp; >>> def zavodu (ref):
& Nbsp; ... res = KeyReferenceToPersistent .__ yeni __ (
& Nbsp; ... KeyReferenceToPersistent, ref)
& Nbsp; ... res.object = ref
& Nbsp; ... qaytarılması res
& Nbsp; ...
& Nbsp; >>> hash (zavod (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata)))) # tipik istinad
& Nbsp; Traceback (ən son zəng, son):
& Nbsp; ...
& Nbsp; ValueError: bu zaman verilənlər bazası adı unavailable
& Nbsp; >>> bool (hash (zavod (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)])))) # multidatabase
& Nbsp; True
Bu KeyReferenceToPersistent tez-tez belə PersistentMapping kimi siniflər üçün münaqişənin həllinə mane olacaq deməkdir.
bir obyekt multidatabase istinad və digər olmadıqda __cmp__ işləyir. Burada bir neçə misaldır.
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata)))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata))))
& Nbsp; 0
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata)))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata))))
& Nbsp; -1
& Nbsp; >>> cmp (zavod (PersistentReference (bir OID))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata))))
& Nbsp; 0
& Nbsp; >>> cmp (zavod (PersistentReference (bir OID))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata))))
& Nbsp; 0
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)]))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)])))
& Nbsp; 0
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)]))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... ['n', (bir verilənlər bazası ',' bir OID)])))
& Nbsp; 0
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)]))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... ['M', (başqa bir verilənlər bazası "," bir OID ',' sinif metadata)])))
& Nbsp; -1
& Nbsp; >>> cmp (zavod (PersistentReference (
& Nbsp; ... ['M', (bir verilənlər bazası ',' bir OID ',' sinif metadata)]))
& Nbsp; ... zavodu (PersistentReference (
& Nbsp; ... (bir OID ',' sinif metadata))))
& Nbsp; Traceback (ən son zəng, son):
& Nbsp; ...
& Nbsp; ValueError: sort etibarlı bilməz
Yer-based əlaqə adapter
funksiyası zope.keyreference.connectionOfPersistent sadə yer-based Heuristic istifadə əlaqələri obyektlərin uyğunlaşır. Bu obyekt bir əlaqəsi var ki, bir __parent__ var görmek üçün yoxlanılır:
& Nbsp; >>> zope.keyreference.persistent idxal connectionOfPersistent dən
& Nbsp; >>> ob3 = PersistentMapping ()
& Nbsp; >>> çap connectionOfPersistent (ob3)
& Nbsp; None
& Nbsp; >>> ob3 .__ parent__ = root2 ['ob1']
& Nbsp; >>> connectionOfPersistent (ob3) conn2 deyil
& Nbsp; True

Bu azad Yeni nədir:

  • Fix testlər test bağımlılıkları olan zope.testing aradan qaldırılması sınıq: ehtiyacı ZODB3 modulu çəkinin.

tələblər

  • Python

Geliştirici digər proqram Zope Corporation and Contributors

Şərh zope.keyreference

Şərhlər tapılmadı
Şərh əlavə
Images yandırın!