dolmen.relations є тонкий шар вище zc.relation, що дозволяє простий і прямий реалізації автономних відносин між об'єктами.
<Сильний> Початок
Для того, щоб продемонструвати можливості пакету, ми спочатку створили осудний середовища:
>>> Від синца імпортної складової
>>> Від імпорту zope.container.btree BTreeContainer
>>> См = component.getGlobalSiteManager ()
>>> Стадо = getRootFolder () ['стадо'] = BTreeContainer ()
<Сильний> каталог відносини
dolmen.relations забезпечує компонент, званий RelationCatalog, яке відповідає за реєстрацію відносин і перебування їх:
>>> Від імпорту dolmen.relations RelationCatalog, ICatalog
>>> Sm.registerUtility (RelationCatalog (), ICatalog)
Контейнер <сильні> Відносини
Для зберігання відносини і викликати необхідні події, dolmen.relations забезпечує BTree контейнер:
>>> Від імпорту dolmen.relations RelationsContainer
>>> Відносини = стадо ['_'] відносини = RelationsContainer ()
<Сильний> Зміст
Тепер нам потрібно деякий зміст, щоб почати. Модуль випробування визначає мамонта постійний об'єкт, що ми збираємося використовувати тут:
>>> Від імпорту dolmen.relations.tests мамонта
>>> Манфред = стадо ['Манфред'] = Мамонт ()
>>> Гюнтер = стадо ['Гюнтер'] = Мамонт ()
Щоб переконатися, що наші об'єкти будуть збережені і будуть надано INT ідентифікатор, ми зобов'язуємося:
>>> Імпортною угоди
>>> Transaction.commit ()
<Сильний> Відносини
Відносини, запропоновані dolmen.relations мають "В" до типу. Вони дозволяють зв'язати вихідний об'єкт з цільовим об'єктом. Для випробувань цілей, ми збираємося створити два Mammoth об'єкти, які будуть використовуватися в якості джерела і цілі:
>>> Від dolmen.relations значень імпортних, або
>>> Від імпортних zope.intid.interfaces IIntIds
>>> IDS = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (Гюнтер)
>>> Manfred_id = ids.getId (Manfred)
<Сильний> Простий ставлення
Перший і найпростіший тип ставлення RelationValue. Це співвідношення створено з ідентифікатором джерела і цільової ID:
>>> Відносини ["простий"] = values.RelationValue (gunther_id, manfred_id)
Ви можете запитати відносини, даючи цільової та / або ID джерела:
>>> Знайшли = список (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Знайшли
[<Об'єкт dolmen.relations.values.RelationValue на ...>]
Ставлення має атрибути, присвячені вирішенню джерело або ціль:
>>> Ставлення = found.pop ()
>>> Ставлення
>>> Relation.source
<Мамонт Гюнтер>
>>> Relation.target
<Мамонт Манфред>
<Сильний> міткою ставлення
Другий тип відносин є TaggedRelationValue. Це дозволяє нам додати в джерело-пари, список тегів, як список рядків Юникода:
>>> Відносини ["помічені"] = values.TaggedRelationValue (
... Gunther_id, manfred_id, теги = [u'grok ", u'dolmen '])
Ставлення може ще бути отримані з простого запиту:
>>> Знайшли = список (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Знайшли
[<Об'єкт dolmen.relations.values.RelationValue на ...>,
Він також може, тепер, бути запитані з використанням тега:
>>> Знайшли = список (rcatalog.findRelations ({'тег': будь-який ('Грок')}))
>>> Знайшли
[]
>>> Знайшли = список (rcatalog.findRelations ({'тег': будь-який ('Drupal')}))
>>> Знайшли
[]
<Сильний> Stateful ставлення
Третій тип відносин є StatefulRelationValue. Він додає, щоб джерело-пари, інформації про стан як юнікода рядки:
>>> Відносини ["станом"] = values.StatefulRelationValue (
... Gunther_id, manfred_id, стан = U "приватний")
Ставлення може ще бути отримані з простого запиту:
>>> Знайшли = список (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Знайшли
[<Об'єкт dolmen.relations.values.RelationValue на ...>,
Він також може, тепер, бути запитане з використанням державної рядок:
>>> Знайшли = список (rcatalog.findRelations ({'державні': будь-який ("приватні")}))
>>> Знайшли
[]
>>> Знайшли = список (rcatalog.findRelations ({'державні': будь-який ("громадських")}))
>>> Знайшли
[]
Події
Всякий раз, коли об'єкт віддаляється, відносини, використовуючи його як джерело або цілі будуть видалені також:
>>> Дель стадо ['Манфред']
>>> Список друку (стадо ['_'] відносини. Клавіші ())
[]
>>> Знайшли = список (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Знайшли
[]
Що нового У цьому випуску:
- Спіймати помилку з intids, коли ID були видалені. не повернення немає в цьому випадку.
Вимоги
- Python
Коментар не знайдено