Personal tools
Zope Component Architecture, a volte ritornano (subito)!

Continuiamo a giocare con la ZCA

Oct 10, 2013

Zope Component Architecture, a volte ritornano (subito)!

Nell'ultimo post parlavo di Zope Component Architecture: l'anallsi fatta allora, mi ha dato la possibilità di risolvere velocemente un problema avuto di recente

Ho da pochi giorni terminato la migrazione di un sito da Plone 3 a Plone 4. Nel sito in questione c'era una miriade di personalizzazioni nella cartella custom della skin e nel portal_view_customization, cosa che non ho mai considerato una buona pratica per questioni di ordine.

L'ultimo problema che ho dovuto affrontare prima di poter dichiarare completato il lavoro è stato quello di dover ripulire il sito da queste personalizzazioni, e mentre per la skin non ci sono stati problemi, per le viste personalizzate nel portal_view_customization la storia è stata ben diversa.

Appena ho tentato di accedere al portal_view_customization dalla ZMI, il sito ha risposto con un AttributeError.


AttributeError: type object 'IXXXXXXXFrontendTheme' has
no attribute 'isOrExtends'
 

La cosa inizialmente non mi ha preoccupato più di tanto. Effettivamente non mi aspettavo delle personalizzazioni fatte direttamente nel sito e, avendo già fatto pulizia, avevo disinstallato e rimosso dal buildout il pacchetto.

Così ho reintrodotto il vecchio tema per mettere di nuovo a disposizione l'interfaccia. Sicuramente il fatto di aver già effettuato la procedura di migrazione non ha aiutato e non sono riuscito a riprendere il controllo del sito: l'accesso al portal_view_customization veniva sempre impedito.

Studiando il pacchetto del vecchio tema mi sono accorto della presenza di alcuni componenti registrati per l'interfaccia indicata dall'errore, ma non sono riuscito a trovare queste registrazioni nemmeno utilizzando wildcard.fixpersistentutilities, un prodotto creato appositamente per la rimozione di quelle utility persistenti che rischiano di rendere inutilizzabile un sito quando si rimuovono i prodotti che registrano quelle utility.

E' a questo punto che mi è tornato in mente quello che avevo già visto nel mio precedente articologli adapter possono essere registrati e cancellati anche via codice. E così ho provato!

Tramite il sitemanager del sito ho potuto vedere gli adapter registrati:


>>> sm = site.getSiteManager()
>>> adapters = list(sm.registerdAdapters())
 

A questo punto, studiando la lista di adapters, ho visto che in effetti c'erano ben due adapter registrati con riferimento all'interfaccia incriminata.

Cercando dentro zope.component come cancellare la registrazione di un adattatore ho trovato il metodo unregisterAdapter, che ho usato in questo modo sugli adattatori presi dalla lista creata precedentemente:


>>> adapter = adapters[x]
>>> sm
.unregisterAdapter(factory=adapter.factory,
required=adapter.required,
provided=adapter.provided,
name=adapter.name)
>>> from transaction import commit
>>> commit() 
 

Finalmente sono riuscito a entrare dentro al portal_view_customization e a cancellare i template personalizzati!

L'immagine per Facebook è di http://www.flickr.com/photos/binaryape/

L'immagine in testata è di http://www.flickr.com/photos/curiousexpeditions/

Filed under: , ,
comments powered by Disqus