dolmen.relations een dunne laag boven zc.relation, waardoor een eenvoudige en doeltreffende uitvoering van standalone relaties tussen objecten.
Aan de slag
Om de functies van het pakket aan te tonen, hebben we eerst het opzetten van een gezond milieu:
>>> Van zope import component
>>> Van zope.container.btree import BTreeContainer
>>> Sm = component.getGlobalSiteManager ()
>>> Kudde = getRootFolder () ['kudde'] = BTreeContainer ()
Relations catalogus
dolmen.relations biedt een component genaamd RelationCatalog dat belast is met het registreren van de relaties en het vinden van hen:
>>> Van dolmen.relations importeren RelationCatalog, ICatalog
>>> Sm.registerUtility (RelationCatalog (), ICatalog)
Relations container
Om de relaties slaan en leiden tot de benodigde gebeurtenissen, dolmen.relations biedt een btree container:
>>> Van dolmen.relations import RelationsContainer
>>> Relations = kudde ['_ betrekkingen "] = RelationsContainer ()
inhoud
Nu moeten we een aantal content aan de slag te gaan. De tests module definieert een mammoet aanhoudende object dat we hier gaan gebruiken:
>>> Van dolmen.relations.tests importeren Mammoth
>>> Manfred = kudde ['Manfred'] = Mammoth ()
>>> Gunther = kudde ['Gunther'] = Mammoth ()
Om zeker te zijn dat onze objecten worden volhardde en zal een int id worden verleend, verbinden wij:
>>> Import transactie
>>> Transaction.commit ()
Relations
De door dolmen.relations voorgestelde verhoudingen van de "A naar B" type. Ze laten je een bron object koppelen aan een doel object. Voor proeven doeleinden gaan we twee Mammoet objecten die zullen worden gebruikt als bron- en doel maken:
>>> Van dolmen.relations invoerwaarden, elke
>>> Van zope.intid.interfaces import IIntIds
>>> Ids = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (Gunther)
>>> Manfred_id = ids.getId (Manfred)
Eenvoudige relatie
De eerste en eenvoudigste soort relatie is de RelationValue. Deze relatie is gemaakt met een bron id en target id:
>>> Relaties ["eenvoudige"] = values.RelationValue (gunther_id, manfred_id)
U kunt een query de relaties door het geven van de doelgroep en / of de bron id:
>>> Gevonden = lijst (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Gevonden
[
De relatie heeft attributen gewijd aan het oplossen van de bron of het doel:
>>> Relatie = found.pop ()
>>> Relatie
>>> Relation.source
>>> Relation.target
Tagged relatie
De tweede soort relatie is de TaggedRelationValue. Het stelt ons in staat om toe te voegen aan de bron-target echtpaar, een lijst van tags als een lijst van unicode strings:
>>> Relaties ["tag"] = values.TaggedRelationValue (
... Gunther_id, manfred_id, markeringen = [u'grok ', u'dolmen'])
De relatie kan nog worden opgehaald met een eenvoudige vraag:
>>> Gevonden = lijst (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Gevonden
[
Het kan ook, nu, worden opgevraagd met behulp van een tag waarde:
>>> Gevonden = lijst (rcatalog.findRelations ({'tag': elke ('grok')}))
>>> Gevonden
[]
>>> Gevonden = lijst (rcatalog.findRelations ({'tag': elke ('Drupal')}))
>>> Gevonden
[]
Stateful relatie
Het derde type relatie is de StatefulRelationValue. Het voegt, naar de bron-target paar, staat informatie als een unicode string:
>>> Relaties ["stateful"] = values.StatefulRelationValue (
... Gunther_id, manfred_id, staat = u "private")
De relatie kan nog worden opgehaald met een eenvoudige vraag:
>>> Gevonden = lijst (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Gevonden
[
Het kan ook, nu, worden opgevraagd met behulp van de staat string:
>>> Gevonden = lijst (rcatalog.findRelations ({'state': elke ('private')}))
>>> Gevonden
[]
>>> Gevonden = lijst (rcatalog.findRelations ({'state': elke ('public')}))
>>> Gevonden
[]
Evenementen
Wanneer een object wordt verwijderd, worden de relaties gebruiken als bron of doel ook geschrapt:
>>> Del kudde ['Manfred']
>>> Print lijst (kudde ['_ relations']. Toetsen ())
[]
>>> Gevonden = lijst (rcatalog.findRelations ({'target_id': manfred_id}))
>>> Gevonden
[]
Wat is nieuw in deze release:
- Vang een fout van de intids wanneer de ID zijn verwijderd. Terug None in dit geval.
Eisen
- Python
Reacties niet gevonden