dolmen.relations είναι ένα λεπτό στρώμα πάνω zc.relation, επιτρέποντας μια απλή και ξεκάθαρη εφαρμογή της αυτόνομης σχέσεις μεταξύ των αντικειμένων.
Ξεκινώντας
Για να αποδείξει τις δυνατότητές του πακέτου, πρέπει πρώτα να δημιουργήσει ένα υγιές περιβάλλον:
>>> Από Zope συνιστώσα εισαγωγής
>>> Από zope.container.btree BTreeContainer εισαγωγής
>>> SM = 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 εισαγωγή μαμούθ
>>> Manfred = κοπάδι [«Manfred '] = μαμούθ ()
>>> Gunther = κοπάδι ['Gunther'] = μαμούθ ()
Για να είμαστε σίγουροι ότι τα αντικείμενα μας θα επέμενε και θα χορηγηθεί id int, δεσμευόμαστε:
>>> Πράξη εισαγωγής
>>> Transaction.commit ()
Σχέσεις
Οι σχέσεις που προτείνει dolmen.relations είναι "Α προς Β" τύπου. Θα σας επιτρέψει να συνδέσετε ένα αντικείμενο πηγή με ένα αντικείμενο-στόχο. Για τις δοκιμές σκοπούς, πρόκειται να δημιουργήσει δύο μαμούθ αντικειμένων που πρόκειται να χρησιμοποιηθούν ως πηγή και στόχο:
>>> Από dolmen.relations τιμές εισαγωγής, οποιοδήποτε
>>> Από IIntIds zope.intid.interfaces εισαγωγής
>>> Ταυτότητες = component.getUtility (IIntIds)
>>> Rcatalog = component.getUtility (ICatalog)
>>> Gunther_id = ids.getId (Gunther)
>>> Manfred_id = ids.getId (Manfred)
Απλή σχέση
Ο πρώτος και πιο απλός τύπος σχέσης είναι η RelationValue. Αυτή η σχέση που δημιουργείται με μια ταυτότητα προέλευσης και ταυτότητας στόχου:
>>> Σχέσεις ["απλή"] = values.RelationValue (gunther_id, manfred_id)
Μπορείτε να διερευνούν τις σχέσεις με το δόσιμο του στόχου ή / και την πηγή id:
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({'target_id »: manfred_id}))
>>> Βρέθηκαν
[
Η σχέση έχει χαρακτηριστικά αφιερωμένο στην επίλυση της προέλευσης ή προορισμού:
>>> Σχέση = found.pop ()
>>> Σχέση
>>> Relation.source
<Μαμούθ Gunther>
>>> Relation.target
<Μαμούθ Manfred>
Tagged σχέση
Το δεύτερο είδος της σχέσης είναι η TaggedRelationValue. Μας επιτρέπει να προσθέσετε στο ζευγάρι πηγή-στόχο, μια λίστα των ετικετών ως λίστα συμβολοσειρών Unicode:
>>> Σχέσεις ["ετικέτα"] = values.TaggedRelationValue (
... Gunther_id, manfred_id, ετικέτες = [u'grok », u'dolmen '])
Η σχέση μπορεί ακόμα να ανακτηθούν με ένα βασικό ερώτημα:
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({'target_id »: manfred_id}))
>>> Βρέθηκαν
[
Μπορεί επίσης, τώρα, να αναζητηθεί χρησιμοποιώντας μια τιμή tag:
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({«ετικέτα»: κάθε («Grok ')}))
>>> Βρέθηκαν
[]
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({«ετικέτα»: κάθε (Drupal)}))
>>> Βρέθηκαν
[]
Stateful σχέση
Ο τρίτος τύπος σχέσης είναι η StatefulRelationValue. Προσθέτει, στο ζευγάρι πηγή-στόχο, πληροφορίες κατάστασης ως μια σειρά Unicode:
>>> Σχέσεις ["stateful"] = values.StatefulRelationValue (
... Gunther_id, manfred_id, κατάσταση = u "ιδιωτικές")
Η σχέση μπορεί ακόμα να ανακτηθούν με ένα βασικό ερώτημα:
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({'target_id »: manfred_id}))
>>> Βρέθηκαν
[
Μπορεί επίσης, τώρα, να αναζητηθεί χρησιμοποιώντας την κατάσταση συμβολοσειρά:
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({«κατάσταση»: κάθε («ιδιωτική»)}))
>>> Βρέθηκαν
[]
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({«κατάσταση»: κάθε («κοινό»)}))
>>> Βρέθηκαν
[]
Εκδηλώσεις
Κάθε φορά που ένα αντικείμενο έχει διαγραφεί, οι σχέσεις χρησιμοποιώντας ως πηγή ή του στόχου διαγράφονται επίσης:
>>> Del κοπάδι [«Manfred»]
>>> Λίστα εκτύπωσης (κοπάδι ['_ σχέσεις »]. Πλήκτρα ())
[]
>>> Βρέθηκε = κατάλογο (rcatalog.findRelations ({'target_id »: manfred_id}))
>>> Βρέθηκαν
[]
Τι είναι καινούργιο σε αυτή την έκδοση:
- Πιάσε ένα σφάλμα από τα intids όταν η ταυτότητα έχουν αφαιρεθεί. Επιστροφή Κανένας σε αυτή την περίπτωση.
Απαιτήσεις :
- Python
Τα σχόλια δεν βρέθηκε