five.intid er en Python-pakken gjør det mulig å bruke zope.intid & nbsp; (og consequentially andre pakker som er avhengige av det som zope.keyreference) i en Zope2 miljø.
Bruk
Først, la sørge for at OFS verktøyet gir grensesnittet:
>>> Fra Products.Five.tests.testing.simplecontent import (
... Manage_addSimpleContent)
>>> Fra zope.intid.interfaces import IIntIds
>>> Fra five.intid import nettstedet
>>> import five.intid.tests som tester
>>> Fra zope.interface.verify import verifyObject
>>> Fra zope.component import getAllUtilitiesRegisteredFor
>>> Fra zope.site.hooks import setSite
>>> Tests.setUp (self.app)
Innhold som er lagt før verktøyet ikke vil bli registrert (inntil eksplisitt kalt til). Vi vil sette noen opp nå for senere
& Nbsp; >>> manage_addSimpleContent (self.folder, 'mycont1 "," Mitt innhold ")
& Nbsp; >>> content1 = self.folder.mycont1
five.intid.site har convenience funksjoner for å legge til, få og fjerne en IntId verktøyet: add_intid, get_intid, del_intid.
Du kan installere verktøyet på et bestemt sted:
>>> site.add_intids (self.folder)
>>> Folder_intids = site.get_intids (self.folder)
>>> VerifyObject (IIntIds, folder_intids)
Sann
Du kan fortelle add_intids å finne området rot, og installere det. Det vil være tilgjengelig 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 til slutt, gjør en remove:
>>> Site.del_intids (self.folder, findroot = True)
>>> site.get_intids (self.app)
Traceback (siste samtale sist):
...
ComponentLookupError: (
Før vi ser på intid hendelser, må vi sette traversering kroken. Når vi har gjort dette, når vi ber for alle registrerte Intids, vil vi få verktøyet fra testmappen:
>>> SetSite (self.folder)
>>> Tuppel (getAllUtilitiesRegisteredFor (IIntIds))
(<... IntIds ...>,)
Når vi legger til innhold, vil hendelsen bli sparket for å legge keyreference for sa objekter verktøyene (for tiden, er vårt innhold og nytte registrert):
>>> Manage_addSimpleContent (self.folder, 'mycont2 "," Mitt innhold ")
>>> Content2 = self.folder.mycont2
>>> Intid = site.get_intids (self.folder)
>>> Len (intid.items ()) == 1
Sann
Pre-eksisterende innhold vil heve en keyerror hvis sendes til intid verktøyet:
>>> Intid.getId (content1)
Traceback (siste samtale sist):
...
KeyError:
Vi kan kalle keyreferences, og få objektene tilbake:
>>> intid.items () [0] [1] ()
vi kan få et objekts intid fra verktøyet slik:
>>> Ob_id = intid.getId (content2)
og få et objekt tilbake som dette:
>>> Intid.getObject (ob_id)
disse objektene er oppkjøpet innpakket på henting:
>>> Fra Acquisition import IAcquirer
>>> IAcquirer.providedBy (intid.getObject (ob_id))
Sann
Vi kan også slå et pakket objekt i en innpakket objekt ved å løse det fra det intid, også den intid verktøyet skal fungere selv om det er pakket:
>>> Fra Acquisition import aq_base
>>> Løst = intid.getObject (intid.getId (aq_base (content2)))
>>> IAcquirer.providedBy (løst)
Sann
>>> Pakket = aq_base (intid)
>>> Unwrapped.getObject (ob_id) == løst
Sann
>>> Unwrapped.getId (content2) == ob_id
Sann
Når et objekt er lagt til eller fjernet, abonnenter legge det til intid verktøyet, og fyre en hendelse er avfyrt (zope.intid.interfaces.IIntIdAddedEvent, zope.intid.interfaces.IIntIdRemovedEvent henholdsvis).
five.intid kroker opp disse hendelsene til redispatch som objekt hendelser. Testene hekte på en enkel abonnent for å verifisere at intid objekt hendelser er avfyrt (disse hendelsene er nyttige for catalogish oppgaver).
& Nbsp; >>> tests.NOTIFIED [0]
& Nbsp;
Registrering og avregistrering gjenstander går ikke av disse hendelsene:
>>> Tests.NOTIFIED [0] = "Ingen endring"
>>> Uid = intid.register (content1)
>>> Intid.getObject (uid)
>>> Tests.NOTIFIED [0]
'Ingen endring'
>>> Intid.unregister (content1)
>>> Intid.getObject (uid)
Traceback (siste samtale sist):
...
KeyError: ...
>>> Tests.NOTIFIED [0]
'Ingen endring'
Døpe et objekt bør ikke bryte konvertering, pluss av objektet:
& Nbsp; >>> self.setRoles (['leder'])
& Nbsp; >>> folder.mycont2.meta_type = 'Mappe' # Vi trenger en metatype å flytte
& Nbsp; >>> folder.manage_renameObject ('mycont2', 'mycont_new')
& Nbsp; >>> flyttet = intid.getObject (ob_id)
& Nbsp; >>> flyttet
& Nbsp;
Heller ikke bør flytte det:
& Nbsp; >>> fra OFS.Folder import manage_addFolder
& Nbsp; >>> manage_addFolder (self.folder, 'mappe2 "," -mappen 2 ")
& Nbsp; >>> cut = folder.manage_cutObjects (['mycont_new'])
& Nbsp; >>> ignorere = folder.folder2.manage_pasteObjects (klipp)
& Nbsp; >>> flyttet = intid.getObject (ob_id)
& Nbsp; >>> flyttet
& Nbsp;
& Nbsp; >>> moved.aq_parent
& Nbsp;
La oss flytte den tilbake:
& Nbsp; >>> cut = folder.folder2.manage_cutObjects (['mycont_new'])
& Nbsp; >>> ignorere = folder.manage_pasteObjects (klipp)
& Nbsp; >>> folder.manage_renameObject ('mycont_new', 'mycont2')
Vi kan lage et objekt uten oppkjøp, slik at vi kan være i stand til å legge intid til det:
& Nbsp; >>> fra five.intid.tests importere DemoPersistent
& Nbsp; >>> demo1 = DemoPersistent ()
& Nbsp; >>> demo1 .__ parent__ = self.app
& Nbsp; >>> fra zope.event import varsle
& Nbsp; >>> fra zope.lifecycleevent import ObjectAddedEvent
& Nbsp; >>> varsle (ObjectAddedEvent (demo1))
& Nbsp; >>> nowrappid = intid.getId (demo1)
& Nbsp; >>> demo1 == intid.getObject (nowrappid)
& Nbsp; Sann
Dette er et godt tidspunkt å ta en titt på keyreferences, kjernen del av dette systemet
Hva er nytt i denne utgaven:.
- Kontroller at IConnection adapter fungerer for uemballerte vedvarende stedene. [Davisagli]
Hva er nytt i versjon 1.0.2:
- Bare ignorere «midlertidige» objekter i ObjectAddedEvent arrangementet behandleren. [MJ]
Hva er nytt i versjon 1.0.1:
- Ignorer «midlertidige» objekter (i Plone portal_factory verktøyet). [MJ]
Hva er nytt i versjon 1.0:
- Fjern siste zope.app avhengighet. [Hannosch]
- Fjern intid utsikt nettleser. [Hannosch]
- Modern kode, flinke til Zope 2.13. [Hannosch]
Krav :
- Python
Kommentarer ikke funnet