five.intid είναι ένα πακέτο Python καθιστά δυνατή τη χρήση zope.intid & nbsp? (Και κατά συνέπεια και άλλα πακέτα που βασίζονται σε αυτό, όπως zope.keyreference) σε ένα περιβάλλον Zope2.
Χρήση
Κατ 'αρχάς, ας βεβαιωθείτε ότι η OFS βοηθητικό πρόγραμμα παρέχει τη διεπαφή:
>>> Από Products.Five.tests.testing.simplecontent εισαγωγής (
... Manage_addSimpleContent)
>>> Από IIntIds zope.intid.interfaces εισαγωγής
>>> Από five.intid θέση εισαγωγής
>>> Five.intid.tests εισαγωγής δοκιμές
>>> Από zope.interface.verify verifyObject εισαγωγής
>>> Από zope.component εισαγωγή getAllUtilitiesRegisteredFor
>>> Από zope.site.hooks setSite εισαγωγής
>>> Tests.setUp (self.app)
Περιεχόμενο προστίθεται πριν από το βοηθητικό πρόγραμμα δεν θα καταχωρηθεί (μέχρι ζητήσει ρητά να). Θα καθορίσει, μέχρι τώρα για αργότερα
& Nbsp? >>> Manage_addSimpleContent (self.folder, «mycont1», «Περιεχόμενο μου")
& Nbsp? >>> Content1 = self.folder.mycont1
five.intid.site έχει λειτουργίες άνεσης για την προσθήκη, πάρει και αφαίρεση χρησιμότητα IntId: add_intid, get_intid, del_intid.
Μπορείτε να εγκαταστήσετε το βοηθητικό πρόγραμμα σε μια συγκεκριμένη θέση:
>>> Site.add_intids (self.folder)
>>> Folder_intids = site.get_intids (self.folder)
>>> VerifyObject (IIntIds, folder_intids)
Αληθής
Μπορείτε να πείτε add_intids να βρούμε τη ρίζα χώρο, και να εγκαταστήσετε εκεί. Θα είναι διαθέσιμο παντού:
>>> Site.add_intids (self.folder, findroot = True)
>>> Root_intids = site.get_intids (self.app)
>>> Root_intids
<... IntIds ...>
>>> Folder_intids είναι root_intids
Ψευδής
Και, τέλος, κάνει μια αφαίρεση:
>>> Site.del_intids (self.folder, findroot = True)
>>> Site.get_intids (self.app)
Traceback (πιο πρόσφατη κλήση τελευταία):
...
ComponentLookupError: (
Πριν κοιτάξουμε intid γεγονότα, θα πρέπει να ρυθμίσετε το άγκιστρο διάσχισης. Αφού έχουμε κάνει αυτό, όταν ζητούμε για όλους τους εγγεγραμμένους Intids, θα πάρει το βοηθητικό πρόγραμμα από το φάκελο της δοκιμής:
>>> SetSite (self.folder)
>>> Πλειάδα (getAllUtilitiesRegisteredFor (IIntIds))
(<... IntIds ...>,)
Όταν έχουμε προσθέσει περιεχόμενο, το γεγονός θα πρέπει να απολυθούν για να προσθέσετε keyreference για την εν λόγω αντικείμενα τα βοηθητικά προγράμματα (επί του παρόντος, το περιεχόμενό μας και η χρησιμότητα είναι εγγεγραμμένοι):
>>> Manage_addSimpleContent (self.folder, «mycont2», «Περιεχόμενο μου")
>>> Content2 = self.folder.mycont2
>>> Intid = site.get_intids (self.folder)
>>> Len (intid.items ()) == 1
Αληθής
Προ-υπάρχον περιεχόμενο θα θέσω ένα keyerror αν περάσει το intid χρησιμότητα:
>>> Intid.getId (content1)
Traceback (πιο πρόσφατη κλήση τελευταία):
...
KeyError:
Μπορούμε να καλέσει τους keyreferences, και να πάρετε πίσω τα αντικείμενα:
>>> Intid.items () [0] [1] ()
μπορούμε να πάρουμε intid ενός αντικειμένου από το βοηθητικό πρόγραμμα, όπως αυτό:
>>> Ob_id = intid.getId (content2)
και να πάρει ένα αντικείμενο πίσω σαν αυτό:
>>> Intid.getObject (ob_id)
αυτά τα αντικείμενα είναι προσκτήσεως τυλιγμένο σε ανάκτηση:
>>> Από την απόκτηση IAcquirer εισαγωγής
>>> IAcquirer.providedBy (intid.getObject (ob_id))
Αληθής
Μπορούμε να μετατρέψει ακόμα και ένα ξετυλίξει το αντικείμενο σε ένα αντικείμενο τυλιγμένο με την επίλυσή του από αυτό είναι intid, επίσης, η intid χρησιμότητα θα πρέπει να λειτουργήσει ακόμη και αν είναι ξετυλίξει:
>>> Από την απόκτηση aq_base εισαγωγής
>>> Επιλυθεί = intid.getObject (intid.getId (aq_base (content2)))
>>> IAcquirer.providedBy (επιλυθεί)
Αληθής
>>> Ξετυλίξει = aq_base (intid)
>>> Unwrapped.getObject (ob_id) == επιλυθεί
Αληθής
>>> Unwrapped.getId (content2) == ob_id
Αληθής
Όταν ένα αντικείμενο προστίθεται ή αφαιρείται, οι συνδρομητές να το προσθέσετε στη intid χρησιμότητα, και φωτιά ένα συμβάν καύση (zope.intid.interfaces.IIntIdAddedEvent, zope.intid.interfaces.IIntIdRemovedEvent αντίστοιχα).
five.intid αγκιστρώνεται αυτά τα γεγονότα να αποστείλει εκ νέου ως αντικείμενο τα γεγονότα. Οι δοκιμές συνδέω ένα απλό συνδρομητή να επαληθεύει ότι οι intid γεγονότα αντικείμενο απολύθηκε (τα γεγονότα αυτά είναι χρήσιμα για τις εργασίες catalogish).
& Nbsp? >>> Tests.NOTIFIED [0]
& Nbsp? "
Καταχώρηση και καταργώντας την καταχώρηση αντικείμενα δεν φωτιά αυτά τα γεγονότα:
>>> Tests.NOTIFIED [0] = "Καμία αλλαγή"
>>> Uid = intid.register (content1)
>>> Intid.getObject (uid)
>>> Tests.NOTIFIED [0]
'Καμία αλλαγή'
>>> Intid.unregister (content1)
>>> Intid.getObject (uid)
Traceback (πιο πρόσφατη κλήση τελευταία):
...
KeyError: ...
>>> Tests.NOTIFIED [0]
'Καμία αλλαγή'
Η μετονομασία ενός αντικειμένου δεν πρέπει να σπάσει το ανασυσκευασίας του αντικειμένου:
& Nbsp? >>> Self.setRoles ([«Διευθυντής»])
& Nbsp? >>> Folder.mycont2.meta_type = "Φάκελος" # Χρειαζόμαστε μια metatype να μετακινήσετε
& Nbsp? >>> Folder.manage_renameObject («mycont2», «mycont_new»)
& Nbsp? >>> Μετακινηθεί = intid.getObject (ob_id)
& Nbsp? >>> Μετακινηθεί
& Nbsp?
Ούτε θα πρέπει να κινείται:
& Nbsp? >>> Από OFS.Folder manage_addFolder εισαγωγής
& Nbsp? >>> Manage_addFolder (self.folder, «folder2», «φάκελος 2")
& Nbsp? >>> Περικοπή = folder.manage_cutObjects (['mycont_new'])
& Nbsp? >>> Αγνοούν = folder.folder2.manage_pasteObjects (περικοπή)
& Nbsp? >>> Μετακινηθεί = intid.getObject (ob_id)
& Nbsp? >>> Μετακινηθεί
& Nbsp?
& Nbsp? >>> Moved.aq_parent
& Nbsp? <Φάκελος στο / test_folder_1_ / folder2>
Ας το προχωρήσουμε πίσω:
& Nbsp? >>> Περικοπή = folder.folder2.manage_cutObjects (['mycont_new'])
& Nbsp? >>> Αγνοούν = folder.manage_pasteObjects (περικοπή)
& Nbsp? >>> Folder.manage_renameObject («mycont_new», «mycont2»)
Μπορούμε να δημιουργήσουμε ένα αντικείμενο χωρίς την απόκτηση έτσι μπορούμε να είμαστε σε θέση να προσθέσετε intid σε αυτό:
& Nbsp? >>> Από five.intid.tests εισαγωγή DemoPersistent
& Nbsp? >>> Demo1 = DemoPersistent ()
& Nbsp? >>> Demo1 .__ parent__ = self.app
& Nbsp? >>> Από zope.event εισαγωγής κοινοποιεί
& Nbsp? >>> Από zope.lifecycleevent ObjectAddedEvent εισαγωγής
& Nbsp? >>> Κοινοποιεί (ObjectAddedEvent (demo1))
& Nbsp? >>> Nowrappid = intid.getId (demo1)
& Nbsp? >>> Demo1 == intid.getObject (nowrappid)
& Nbsp? True
Αυτή είναι μια καλή στιγμή για να ρίξετε μια ματιά στο keyreferences, το βασικό μέρος αυτού του συστήματος
Τι είναι καινούργιο σε αυτή την έκδοση:.
- Βεβαιωθείτε ότι ο προσαρμογέας IConnection εργάζεται για ξετυλίξει επίμονη αντικείμενα. [Davisagli]
Τι είναι καινούργιο στην έκδοση 1.0.2:
- Μόνο αγνοήσει «προσωρινή» αντικείμενα σε περίπτωση ObjectAddedEvent χειριστή. [MJ]
Τι είναι καινούργιο στην έκδοση 1.0.1:
- Ignore «προσωρινή» αντικείμενα (στην portal_factory Plone εργαλείο). [MJ]
Τι είναι καινούργιο στην έκδοση 1.0:
- Κατάργηση τελευταία εξάρτηση zope.app. [Hannosch]
- Κατάργηση intid θέα του προγράμματος περιήγησης. [Hannosch]
- Να εκσυγχρονίσει κώδικα, έμπειρος σε Zope 2.13. [Hannosch]
Απαιτήσεις :
- Python
Τα σχόλια δεν βρέθηκε