zope.keyreference

نرم افزار تصویر:
zope.keyreference
جزئیات نرم افزار:
نسخه: 3.6.4
ها تاریخ: 15 Apr 15
توسعه دهنده: Zope Corporation and Contributors
پروانه: رایگان
محبوبیت: 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؛ >>> هدایت کردن = db.open ()
و nbsp؛ >>> ریشه = conn.root ()
و nbsp؛ >>> ریشه ['OB1'] = PersistentMapping ()
و nbsp؛ >>> ریشه ['ob2'] = PersistentMapping ()
و nbsp؛ >>> transaction.commit ()
سپس ما برخی از منابع کلیدی ایجاد:
و nbsp؛ >>> از zope.keyreference.persistent KeyReferenceToPersistent واردات
و nbsp؛ >>> key1 = KeyReferenceToPersistent (ریشه ['OB1'])
و nbsp؛ >>> key2 = KeyReferenceToPersistent (ریشه ['ob2'])
ما می توانیم از کلید های تماس برای دریافت اشیاء:
و nbsp؛ >>> key1 () ریشه است ['OB1']، key2 () ریشه است ['ob2']
و nbsp؛ (درست است، درست)
کلید های جدید به اشیاء مشابه به قدیمی مساوی هستند:
و nbsp؛ >>> KeyReferenceToPersistent (ریشه ['OB1']) == key1
و nbsp؛ واقعی
و از رشته هش را همان:
و nbsp؛ >>> هش (KeyReferenceToPersistent (ریشه ['OB1'])) == هش (key1)
و nbsp؛ واقعی
دیگر پیاده سازی مرجع کلیدی توسط نوع 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 __ (خود، دیگر):
را لمس کنید و. ... اگر 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؛ >>> کلید = [key1، dummy_key1، dummy_key2، key2، dummy_key3]
و nbsp؛ >>> keys.sort ()
و nbsp؛ >>> key_type_ids = [key.key_type_id برای کلید در کلید]
و nbsp؛ >>> key_type_ids [0: 3] .count ('zope.app.keyreference.object')
& nbsp؛ از 3
. & nbsp؛ در >>> key_type_ids [3:] تعداد ('zope.app.keyreference.persistent')
و nbsp؛ 2
ما منابع کلیدی در پایگاه داده را ذخیره:
و nbsp؛ >>> ریشه ['key1'] = key1
و nbsp؛ >>> ریشه ['key2'] = key2
و استفاده از کلید های برای ذخیره اشیاء دوباره:
و nbsp؛ >>> ریشه [key1] = ریشه ['OB1']
و nbsp؛ >>> ریشه [key2] = ریشه ['ob2']
و nbsp؛ >>> transaction.commit ()
در حال حاضر ما ارتباط دیگری باز:
و nbsp؛ >>> conn2 = db.open ()
و تأیید کنید که ما می توانیم کلید به نگاه کردن به اشیاء استفاده کنید:
و nbsp؛ >>> root2 = conn2.root ()
و nbsp؛ >>> key1 = root2 ['key1']
و nbsp؛ >>> root2 [key1] root2 است ['OB1']
و nbsp؛ واقعی
و nbsp؛ >>> key2 = root2 ['key2']
و nbsp؛ >>> root2 [key2] root2 است ['ob2']
و nbsp؛ واقعی
و ما همچنین می توانید کلید های تماس برای دریافت اشیاء:
و nbsp؛ >>> key1 () root2 است ['OB1']
و nbsp؛ واقعی
و nbsp؛ >>> key2 () root2 است ['ob2']
و nbsp؛ واقعی
ما می توانیم مرجع کلیدی برای یک شی است که ذخیره نشده است می کنید:
و nbsp؛ >>> KeyReferenceToPersistent (PersistentMapping ())
و nbsp؛ ... # doctest: + حذف
را لمس کنید و. Traceback (تماس جدید ترین تاریخ و زمان آخرین):
& nbsp؛ در ...
& nbsp؛ در NotYet: ...
توجه داشته باشید که ما یک خطای NotYet. این نشان می دهد که ما ممکن است قادر به گرفتن یک مرجع کلیدی بعد.
ما می توانیم اشاره به اشیاء ذخیره نشده اگر آنها یک آداپتور به ZODB.interfaces.IConnection. روش اضافه کردن در اتصال استفاده می شود به شی شناسه شی است که اطلاعات کافی برای محاسبه مرجع. برای دیدن این، ما یک شی است که مطابق با 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 اداره کند. بدون این رفتار، اشیاء، مانند ZODB BTrees کلاسیک، که با استفاده از KeyReferenceToPersistent به عنوان کلید و یا اعضای مجموعه قادر به حل و فصل درگیری خواهد بود. حتی با کد خاص، در برخی از موارد KeyReferenceToPersistent به مقایسه و هش در طول حل تعارض به دلیل آن نمی تواند این کار را رد خواهد کرد.
__hash__ نسبتا به ندرت در طول حل تعارض کار خواهد کرد: فقط برای مراجع multidatabase. در اینجا چند مثال.
و nbsp؛ >>> از ZODB.ConflictResolution PersistentReference واردات
و nbsp؛ >>> کارخانه دف (کد عکس):
و nbsp؛ ... RES = KeyReferenceToPersistent .__ جدید __ (
و nbsp؛ ... KeyReferenceToPersistent، کد عکس)
و nbsp؛ ... res.object = کد عکس
و nbsp؛ ... RES بازگشت
& nbsp؛ در ...
و nbsp؛ >>> هش (کارخانه (PersistentReference (
را لمس کنید و ... ('OID'، 'ابرداده کلاس')))) # مرجع معمولی
را لمس کنید و. Traceback (تماس جدید ترین تاریخ و زمان آخرین):
& nbsp؛ در ...
& nbsp؛ در ValueError: نام پایگاه داده در دسترس نیست در این زمان
و nbsp؛ >>> بولی (هش (کارخانه (PersistentReference (
و nbsp؛ ... ['M'، ('یک پایگاه داده'، 'OID'، 'ابرداده کلاس')])))) # multidatabase
و nbsp؛ واقعی
این به این معنی است که KeyReferenceToPersistent اغلب مانع حل تعارض برای کلاس مانند PersistentMapping.
__cmp__ کار می کند مگر اینکه یک شی مرجع multidatabase است و از سوی دیگر است. در اینجا چند نمونه هستند.
و 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'، 'ابرداده کلاس'))))
را لمس کنید و. Traceback (تماس جدید ترین تاریخ و زمان آخرین):
& 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؛ درست

چه جدید در این نسخه است:

در رفع تست های حذف zope.testing از وابستگی آزمون شکسته: جلوگیری از ماژول ZODB3 که به آن نیاز دارد.

مورد نیاز:

پایتون

نرم افزار های دیگر از توسعه دهنده Zope Corporation and Contributors

cipher.configstore
cipher.configstore

20 Feb 15

zope.generations
zope.generations

15 Apr 15

zope.file
zope.file

14 Apr 15

نظرات به zope.keyreference

نظر یافت نشد
اضافه کردن نظر
روشن کردن تصاویر!