dolmen.relations е тънък слой над zc.relation, което позволява просто и ясно прилагане на самостоятелни отношения между обекти.
<Силен> Първи стъпки
За да докаже функции на пакета, за първи път се създаде нормална среда:
>>> От компонент внос Zope
>>> От 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 ()
<Силен> Content
Сега имаме нужда от съдържание, за да започнете. Модулът за тестове дефинира Mammoth персистираща обект, който ние ще използваме тук:
>>> От dolmen.relations.tests внасят Mammoth
>>> Манфред = стадо ["Манфред"] = Mammoth ()
>>> Гюнтер = стадо ['Гюнтер'] = Mammoth ()
За да сте сигурни, че нашите обекти ще се продължава и ще бъде предоставено INT ID, ние се ангажираме:
>>> Операция по вноса
>>> Transaction.commit ()
<Силен> Връзки
Предложените от dolmen.relations отношения са от "А до точка Б" тип. Те ви позволяват да свържете обект източник с целева обект. За тестове, цели, ние ще създадем две Mammoth обекти, които ще бъдат използвани като източник и цел:
>>> От dolmen.relations стойности при внос, всеки
>>> От IIntIds zope.intid.interfaces внос
>>> IDS = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (Гюнтер)
>>> Manfred_id = ids.getId (Манфред)
<Силен> Обикновено връзка
Първият и елементарния тип връзка е RelationValue. Тази връзка е създадена с ID източника и целта на обявата:
>>> Отношения ["прост"] = values.RelationValue (gunther_id, manfred_id)
Вие може да задава въпроси на отношенията чрез даване на целевата и / или източник на обявата:
>>> намерено списъка (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Намерен
[
Връзката има атрибути, посветени на решаването на изходния или целевия:
>>> Връзка = found.pop ()
>>> Връзка
>>> Relation.source
>>> Relation.target
<Силен> Маркирани връзка
Вторият тип връзка е TaggedRelationValue. Тя ни позволява да добавите към източник мишена двойката, списък с етикети като списък от Unicode стрингове:
>>> отношения ["маркира"] = values.TaggedRelationValue (
... gunther_id, manfred_id, тагове = [u'grok ", u'dolmen '])
Връзката все още може да бъде възстановен с основния въпрос:
>>> намерено списъка (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Намерен
[
Тя може също така, сега, да се запита използване на стойност етикет:
>>> намерено списъка (rcatalog.findRelations ({'таг ": всеки (" гроквам ")}))
>>> Намерен
[]
>>> намерено списъка (rcatalog.findRelations ({'таг ": всеки (" Друпал ")}))
>>> Намерен
[]
<Силен> Stateful връзка
Третият тип връзка е StatefulRelationValue. Тя добавя, към източник мишена двойка, Информацията за състоянието на като низ Unicode:
>>> отношения ["динамична защитна"] = values.StatefulRelationValue (
... Gunther_id, manfred_id, държавна = ф "частен")
Връзката все още може да бъде възстановен с основния въпрос:
>>> намерено списъка (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Намерен
[
Тя може също така, сега, да се запита, използвайки държавната низ:
>>> намерено списъка (rcatalog.findRelations ({"държава": всеки ("частни")}))
>>> Намерен
[]
>>> намерено списъка (rcatalog.findRelations ({"държава": всеки ("публични")}))
>>> Намерен
[]
<Силни> Събития
Когато даден обект се заличава, отношенията, които го използват като източник или приемник, се заличават и:
>>> Дел стадо ["Манфред"]
>>> списък на печат (родословни ['_ отношения "]. ключове ())
[]
>>> намерено списъка (rcatalog.findRelations ({'target_id ": manfred_id}))
>>> Намерен
[]
Какво ново в тази версия:
- Хвани грешка от intids когато ID са били отстранени. Върнете Никой в този случай.
<силни> Изисквания
- Python
Коментари не е намерена