dolmen.relations er et tynt lag over zc.relation, slik at en enkel og grei gjennomføring av frittstående relasjoner mellom objekter.
Komme i gang
For å demonstrere pakkenes egenskaper, må vi først sette opp en fornuftig miljø:
>>> Fra Zope import komponent
>>> Fra zope.container.btree import BTreeContainer
>>> Sm = component.getGlobalSiteManager ()
>>> Flokk = getRootFolder () ['flokk'] = BTreeContainer ()
Relations Katalog
dolmen.relations gir en komponent kalt RelationCatalog som har ansvaret for registrering av relasjoner og finne dem:
>>> Fra dolmen.relations importere RelationCatalog, ICatalog
>>> Sm.registerUtility (RelationCatalog (), ICatalog)
Relations container
For å lagre relasjoner og utløse de nødvendige hendelser, dolmen.relations gir en btree container:
>>> Fra dolmen.relations import RelationsContainer
>>> relations = flokk ['_ relations'] = RelationsContainer ()
Innhold
Nå trenger vi noe innhold å komme i gang. Den tester modulen definerer en Mammoth vedvarende objekt som vi skal bruke her:
>>> Fra dolmen.relations.tests importere Mammoth
>>> Manfred = flokk ['Manfred'] = Mammoth ()
>>> Gunther = flokk ['gunther'] = Mammoth ()
For å være sikker på at våre objekter vil bli faste og vil bli innvilget en int id, forplikter vi:
>>> Import transaksjoner
>>> Transaction.commit ()
Relations
De forbindelser som foreslås av dolmen.relations er av "A til B" type. De lar deg koble en kilde objekt med et mål objekt. For tester formål, skal vi lage to Mammoth objekter som kommer til å bli brukt som kilde og mål:
>>> Fra dolmen.relations importverdier, noe
>>> Fra zope.intid.interfaces import IIntIds
>>> ids = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (Gunther)
>>> Manfred_id = ids.getId (manfred)
Enkelt forhold
Den første og enkleste forhold typen er RelationValue. Dette forholdet er opprettet med en kilde id og target id:
>>> Relasjoner ["enkel"] = values.RelationValue (gunther_id, manfred_id)
Du kan spørre forholdet ved å gi målet og / eller kilde id:
>>> funnet = liste (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Funnet
[
Forholdet har attributter som er dedikert til å løse kilden eller målet:
>>> Forhold = found.pop ()
>>> Forhold
>>> Relation.source
>>> Relation.target
Merket forhold
Den andre typen av forhold er TaggedRelationValue. Det tillater oss å legge til en kilde-target par, en liste over koder som en liste med Unicode-strenger:
>>> relasjoner ["tagget"] = values.TaggedRelationValue (
... gunther_id, manfred_id, tags = [u'grok ', u'dolmen'])
Forholdet kan fortsatt hentes med en grunnleggende spørsmålet:
>>> funnet = liste (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Funnet
[
Det kan også, nå, skal spørres bruke en tag verdi:
>>> funnet = liste (rcatalog.findRelations ({'tag': noen ('Grok')}))
>>> Funnet
[]
>>> funnet = liste (rcatalog.findRelations ({'tag': noen ('Drupal')}))
>>> Funnet
[]
Stateful forhold
Den tredje typen forhold er StatefulRelationValue. Det legger til kilden-target par, tilstandsinformasjon som en Unicode-streng:
>>> relasjoner ["Stateful"] = values.StatefulRelationValue (
... Gunther_id, manfred_id, state = u "private")
Forholdet kan fortsatt hentes med en grunnleggende spørsmålet:
>>> funnet = liste (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Funnet
[
Det kan også, nå, skal spørres bruker staten streng:
>>> funnet = liste (rcatalog.findRelations ({'state': noen ('private')}))
>>> Funnet
[]
>>> funnet = liste (rcatalog.findRelations ({'state': noen ('offentlige')}))
>>> Funnet
[]
Arrangementer
Når et objekt er slettet, er forholdet bruker den som kilde eller target slettet også:
>>> Del flokk ['manfred']
>>> print liste (gjete ['_ relations']. nøkler ())
[]
>>> funnet = liste (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Funnet
[]
Hva er nytt i denne versjonen:
- Catch en feil fra intids når ID har blitt fjernet. Returnere Ingen i dette tilfellet.
Krav
- Python
Kommentarer ikke funnet