five.intid er en Python-pakke gør det muligt at bruge zope.intid & nbsp; (og som følge heraf andre pakker, der er afhængige af det, såsom zope.keyreference) i en Zope2 miljø.
Anvendelse
Først, lad sørg for OFS hjælpeprogram giver grænsefladen:
>>> Fra Products.Five.tests.testing.simplecontent import (
... Manage_addSimpleContent)
>>> Fra zope.intid.interfaces import- IIntIds
>>> Fra five.intid import websted
>>> import- five.intid.tests som test
>>> Fra zope.interface.verify import verifyObject
>>> Fra zope.component import getAllUtilitiesRegisteredFor
>>> Fra zope.site.hooks import setSite
>>> Tests.setUp (self.app)
Indhold tilsættes før værktøjet ikke bliver registreret (indtil eksplicit kaldet til). Vi vil sætte nogle op nu til senere
& Nbsp; >>> manage_addSimpleContent (self.folder »mycont1 '," My Content ")
& Nbsp; >>> content1 = self.folder.mycont1
five.intid.site har komfortfunktioner til at tilføje, få og fjerne en IntId nytte: add_intid, get_intid, del_intid.
Du kan installere hjælpeprogrammet i et bestemt sted:
>>> site.add_intids (self.folder)
>>> Folder_intids = site.get_intids (self.folder)
>>> VerifyObject (IIntIds, folder_intids)
Sandt
Du kan fortælle add_intids at finde stedet rod, og installere der. Det vil være tilgængelige overalt:
>>> Site.add_intids (self.folder, findroot = True)
>>> Root_intids = site.get_intids (self.app)
>>> root_intids
<... IntIds ...>
>>> Folder_intids er root_intids
False
Og endelig gør en fjern:
>>> Site.del_intids (self.folder, findroot = True)
>>> site.get_intids (self.app)
Tilbagesporingstællingen (seneste opkald sidste):
...
ComponentLookupError: (
Før vi ser på intid begivenheder, er vi nødt til at indstille traversal krog. Når vi har gjort det, når vi beder om alle registrerede Intids, får vi hjælpeprogrammet fra test mappe:
>>> SetSite (self.folder)
>>> Tuple (getAllUtilitiesRegisteredFor (IIntIds))
(<... IntIds ...>,)
Når vi tilføjer indhold, vil event blive fyret for at tilføje keyreference for objekterne forsyningsselskaber (i øjeblikket, er vores indhold og nytte registreret):
>>> Manage_addSimpleContent (self.folder »mycont2 '," My Content ")
>>> Indhold2 = self.folder.mycont2
>>> Intid = site.get_intids (self.folder)
>>> LEN (intid.items ()) == 1
Sandt
Forud eksisterende indhold vil rejse en keyerror hvis ledes til intid nytte:
>>> Intid.getId (content1)
Tilbagesporingstællingen (seneste opkald sidste):
...
KeyError:
Vi kan kalde keyreferences, og få objekterne tilbage:
>>> intid.items () [0] [1] ()
vi kan få et objekts intid fra værket som så:
>>> Ob_id = intid.getId (indhold2)
og få et objekt tilbage på denne måde:
>>> Intid.getObject (ob_id)
Disse objekter er erhvervelsen indpakkes om hentning:
>>> Fra Acquisition import IAcquirer
>>> IAcquirer.providedBy (intid.getObject (ob_id))
Sandt
Vi kan endda slå en uindpakket objekt i en indpakket objekt ved at løse det fra det intid, også intid hjælpeprogrammet skal virke, selvom den pakkes ud:
>>> Fra Acquisition import aq_base
>>> Løst = intid.getObject (intid.getId (aq_base (indhold2)))
>>> IAcquirer.providedBy (løst)
Sandt
>>> Uindpakket = aq_base (intid)
>>> Unwrapped.getObject (ob_id) == løst
Sandt
>>> Unwrapped.getId (indhold2) == ob_id
Sandt
Når et objekt er tilføjet eller fjernet, abonnenter føje det til intid nytte, og fyre en begivenhed er fyret (zope.intid.interfaces.IIntIdAddedEvent, zope.intid.interfaces.IIntIdRemovedEvent henholdsvis).
five.intid kroge op disse begivenheder tilbagesendes som objekt begivenheder. Testene tilslutte en enkel abonnent for at kontrollere, at de intid objekt begivenheder er fyret (disse begivenheder er nyttige for catalogish opgaver).
& Nbsp; >>> tests.NOTIFIED [0]
& Nbsp; "
Registrering og afmelding objekter affyres ikke disse begivenheder:
>>> Tests.NOTIFIED [0] = "Ingen ændring"
>>> Uid = intid.register (content1)
>>> Intid.getObject (uid)
>>> Tests.NOTIFIED [0]
»Ingen ændring"
>>> Intid.unregister (content1)
>>> Intid.getObject (uid)
Tilbagesporingstællingen (seneste opkald sidste):
...
KeyError: ...
>>> Tests.NOTIFIED [0]
»Ingen ændring"
Omdøbning af et objekt skal ikke bryde pakkecentrets af objektet:
& Nbsp; >>> self.setRoles (['manager'])
& Nbsp; >>> folder.mycont2.meta_type = 'Folder' # Vi har brug for en metatype at flytte
& Nbsp; >>> folder.manage_renameObject (»mycont2 ',' mycont_new ')
& Nbsp; >>> flyttet = intid.getObject (ob_id)
& Nbsp; >>> flyttet
& Nbsp;
Bør heller ikke flytte det:
& Nbsp; >>> fra OFS.Folder import manage_addFolder
& Nbsp; >>> manage_addFolder (self.folder »mappe2 '," folder 2 ")
& Nbsp; >>> afskårne = folder.manage_cutObjects (['mycont_new'])
& Nbsp; >>> ignorere = folder.folder2.manage_pasteObjects (cut)
& Nbsp; >>> flyttet = intid.getObject (ob_id)
& Nbsp; >>> flyttet
& Nbsp;
& Nbsp; >>> moved.aq_parent
& Nbsp;
Lad os flytte den tilbage:
& Nbsp; >>> afskårne = folder.folder2.manage_cutObjects (['mycont_new'])
& Nbsp; >>> ignorere = folder.manage_pasteObjects (cut)
& Nbsp; >>> folder.manage_renameObject (»mycont_new ',' mycont2 ')
Vi kan skabe et objekt uden overtagelse, så vi kan være i stand til at tilføje intid til det:
& Nbsp; >>> fra five.intid.tests importerer DemoPersistent
& Nbsp; >>> demo1 = DemoPersistent ()
& Nbsp; >>> demo1 .__ parent__ = self.app
& Nbsp; >>> fra zope.event import anmelde
& Nbsp; >>> fra zope.lifecycleevent import ObjectAddedEvent
& Nbsp; >>> anmelde (ObjectAddedEvent (demo1))
& Nbsp; >>> nowrappid = intid.getId (demo1)
& Nbsp; >>> demo1 == intid.getObject (nowrappid)
& Nbsp; Sand
Det er et godt tidspunkt at tage et kig på keyreferences, gennemføres hovedparten af dette system
Hvad er nyt i denne udgivelse:.
- Sørg for, at IConnection adapteren virker for uindpakkede persistente objekter. [Davisagli]
Hvad er nyt i version 1.0.2:
- Kun ignorere »midlertidig« objekter i ObjectAddedEvent begivenhed handleren. [MJ]
Hvad er nyt i version 1.0.1:
- Ignorer »midlertidig« objekter (i Plone portal_factory værktøj). [MJ]
Hvad er nyt i version 1.0:
- Fjern sidste zope.app afhængighed. [Hannosch]
- Fjern intid udsigt browser. [Hannosch]
- modernisere kode, dygtig til Zope 2.13. [Hannosch]
Krav :
- Python
Kommentarer ikke fundet