[ZIZope] override del navigatore

2 views
Skip to first unread message

Massimo Azzolini

unread,
Feb 1, 2008, 11:15:18 AM2/1/08
to Gli utilizzatori italiani di Zope
ciao a tutti,

vorrei fare una roba che direi banale, ma mi sono "intrippato".

vorrei che per un mio obj, che implementa l'interfaccia IMyobj, il navigatore anzichè far vedere il titolo fa vedere sempre la scritta "CIAOBBELLO". ok?

mi son fatto la mia classe che implementa INavtreeStrategy come descritto in:
http://plone.org/documentation/manual/plone-developer-reference/specific-areas/navigation-structures/referencemanual-all-pages

poi nella "decoratorFactory" dove il bravo plonista fa:
newNode['Title'] = utils.pretty_title_or_id(context, item)

io scrivo
if portalType = "Myobj":
   newNode['Title'] = "CIAOBBELLO"
else:
   newNode['Title'] = utils.pretty_title_or_id(context, item)

ovviamente newNode contiene quanto gli scrivo, ma alla fine mi stampa sempre e cmq il titolo dell'oggetto!

dov'è che sbaglio?
non è la decoratorFactory dove devo intervenire?

please help, so che l'è tardino, ma mi piacerebbe tanto finire entro sera... :)

ciao a tutti e grazie

max

Fabrizio Reale

unread,
Feb 1, 2008, 11:31:51 AM2/1/08
to Gli utilizzatori italiani di Zope
Ciao,

Alle venerdì 1 febbraio 2008, Massimo Azzolini ha scritto:
> ciao a tutti,
>
> vorrei fare una roba che direi banale, ma mi sono "intrippato".
>
> vorrei che per un mio obj, che implementa l'interfaccia IMyobj, il
> navigatore anzichè far vedere il titolo fa vedere sempre la scritta
> "CIAOBBELLO". ok?
>
> mi son fatto la mia classe che implementa INavtreeStrategy come descritto
> in:
> http://plone.org/documentation/manual/plone-developer-reference/specific-ar
>eas/navigation-structures/referencemanual-all-pages
>
> poi nella "decoratorFactory" dove il bravo plonista fa:
> newNode['Title'] = utils.pretty_title_or_id(context, item)
>
> io scrivo
> if portalType = "Myobj":

Sarebbe troppo facile...ma qui manca un uguale.


>    newNode['Title'] = "CIAOBBELLO"
> else:
>    newNode['Title'] = utils.pretty_title_or_id(context, item)
>
> ovviamente newNode contiene quanto gli scrivo, ma alla fine mi stampa
> sempre e cmq il titolo dell'oggetto!
>
> dov'è che sbaglio?
> non è la decoratorFactory dove devo intervenire?
>
> please help, so che l'è tardino, ma mi piacerebbe tanto finire entro
> sera... :)

Spero di aver contribuito nel mandarti a dormire :)

Fabry


--
Fabrizio Reale fabrizi...@redomino.com
Redomino S.r.l. Largo Valgioie 14 - 10146 Torino - Italy
Tel: +39 011 7499875 - Fax: +39 011 3716911 http://www.redomino.com/

Massimo Azzolini

unread,
Feb 1, 2008, 11:41:19 AM2/1/08
to Gli utilizzatori italiani di Zope

> if portalType = "Myobj":

Sarebbe troppo facile...ma qui manca un uguale.

sei un maligno... non era quello :)

e alla fine l'ho scoperto!
il bravo plonista mi crea una bel newNode con tanto di title ecc. ecc.
poi nel template portlet_navtree_macro.pt usa item/Title e non node/Title

avevo il mio bel da fare...

forse a questo punto bastava fare un accessor adhoc x title sul mio tipo?
boh, non lo so. non m'importa.

Spero di aver contribuito nel mandarti a dormire :)

no, però grazie del pensiero

max

Davide Moro

unread,
Feb 1, 2008, 12:00:02 PM2/1/08
to Gli utilizzatori italiani di Zope
Il giorno ven, 01/02/2008 alle 17.41 +0100, Massimo Azzolini ha scritto:
>
>
> > if portalType = "Myobj":

Siccome hai una marker interface non utilizzerei il portal_type per fare
il controllo, che ne dici?

>
>
> Sarebbe troppo facile...ma qui manca un uguale.
>
> sei un maligno... non era quello :)
>
> e alla fine l'ho scoperto!
> il bravo plonista mi crea una bel newNode con tanto di title ecc. ecc.
> poi nel template portlet_navtree_macro.pt usa item/Title e non
> node/Title

Ahh, era capitato anche a me mesi fa, hai tutta la mia solidarietà :)

Ciao,

davide

--
Davide Moro davide.moro<at>redomino.com


Redomino S.r.l. Largo Valgioie 14 - 10146 Torino - Italy

Tel: +39 011 7499875 - Fax: +39 011 3716911 - http://www.redomino.com

Massimo Azzolini

unread,
Feb 1, 2008, 12:49:50 PM2/1/08
to david...@redomino.com, Gli utilizzatori italiani di Zope


2008/2/1 Davide Moro <david...@redomino.com>:

Il giorno ven, 01/02/2008 alle 17.41 +0100, Massimo Azzolini ha scritto:
>
>
>         > if portalType = "Myobj":

Siccome hai una marker interface non utilizzerei il portal_type per fare
il controllo, che ne dici?

beh.. come contraddirti..

però in quel punto l'item è un brain (no?) e per aver l'interfaccia mi serve l'oggetto.
E si diceva che "svegliare" oggetti era il male.
giusto o sono già sperso in lande desolate di ignoranza?

se posso svegliare l'oggetto allora son con te:

IMyTitle(item.getObject()).getTitle()

e via di adapter. no?


> e alla fine l'ho scoperto!
> il bravo plonista mi crea una bel newNode con tanto di title ecc. ecc.
> poi nel template portlet_navtree_macro.pt usa item/Title e non
> node/Title

Ahh, era capitato anche a me mesi fa, hai tutta la mia solidarietà :)

grazie...

max

Fabrizio Reale

unread,
Feb 2, 2008, 3:01:47 AM2/2/08
to Gli utilizzatori italiani di Zope
Alle venerdì 1 febbraio 2008, Massimo Azzolini ha scritto:
> 2008/2/1 Davide Moro <david...@redomino.com>:
> > Il giorno ven, 01/02/2008 alle 17.41 +0100, Massimo Azzolini ha scritto:
> > > > if portalType = "Myobj":
> >
> > Siccome hai una marker interface non utilizzerei il portal_type per fare
> > il controllo, che ne dici?
>
> beh.. come contraddirti..
>
> però in quel punto l'item è un brain (no?) e per aver l'interfaccia mi
> serve l'oggetto.
> E si diceva che "svegliare" oggetti era il male.
> giusto o sono già sperso in lande desolate di ignoranza?

Si... confermo, svegliare gli oggetti per cose così banali è un MALE :)
(lo scrivo solo per i novizi, proprio ieri un amico mi diceva che Plone era
lento a mostrare gli 8700 oggetti che aveva in una cartella con una bella
vista che li richiamava tutti)

Non ricordo che versione di Plone stai usando...ma nella 3 c'è
l'indice "object_provides" che è proprio una keyword con le interfacce
dell'oggetto.

Scusa se ti rispondo il giorno dopo, spero nel frattempo tu sia andato a
dormire :)
Facci sapere se funza.

A presto,
Fabrizio

--
Fabrizio Reale fabrizi...@redomino.com


Redomino S.r.l. Largo Valgioie 14 - 10146 Torino - Italy

Tel: +39 011 7499875 - Fax: +39 011 3716911 http://www.redomino.com/

Yuri

unread,
Feb 2, 2008, 6:39:49 AM2/2/08
to Gli utilizzatori italiani di Zope
Fabrizio Reale wrote:
> Alle venerdì 1 febbraio 2008, Massimo Azzolini ha scritto:
>
>> 2008/2/1 Davide Moro <david...@redomino.com>:
>>
>>> Il giorno ven, 01/02/2008 alle 17.41 +0100, Massimo Azzolini ha scritto:
>>>
>>>> > if portalType = "Myobj":
>>>>
>>> Siccome hai una marker interface non utilizzerei il portal_type per fare
>>> il controllo, che ne dici?
>>>
>> beh.. come contraddirti..
>>
>> però in quel punto l'item è un brain (no?) e per aver l'interfaccia mi
>> serve l'oggetto.
>> E si diceva che "svegliare" oggetti era il male.
>> giusto o sono già sperso in lande desolate di ignoranza?
>>
>
> Si... confermo, svegliare gli oggetti per cose così banali è un MALE :)
> (lo scrivo solo per i novizi, proprio ieri un amico mi diceva che Plone era
> lento a mostrare gli 8700 oggetti che aveva in una cartella con una bella
> vista che li richiamava tutti)
>

http://www.upfrontsystems.co.za/Members/roche/where-im-calling-from/zodb-benchmarks

Digli di fare la stessa cosa con postgres.

Tra l'altro la maggior parte del tempo è il rendering del browser, non
ZODB o Zope.

> Non ricordo che versione di Plone stai usando...ma nella 3 c'è
> l'indice "object_provides" che è proprio una keyword con le interfacce
> dell'oggetto.
>

Mi pare di aver letto qualcosa:

http://rpatterson.net/software/grouparchy.index.provider

index provided interfaces

The extensive use of marker interfaces in grouparchy
<http://rpatterson.net/software/grouparchy> required an index that
indexed the interfaces provided by objects. The
grouparchy.index.provider
<http://dev.plone.org/collective/browser/grouparchy/grouparchy.index.provider/trunk?rev=54090>
package provides a zope.index index
<http://api.rst2a.com/1.0/rst2/html?uri=http%3A%2F%2Fsvn.plone.org%2Fsvn%2Fcollective%2Fgrouparchy%2Fgrouparchy.index.provider%2Ftrunk%2Fgrouparchy%2Findex%2Fprovider%2FREADME.txt%3Frev%3D56019&style=zope>
that does so. It depends on grouparchy.schema
<http://rpatterson.net/software/grouparchy.schema>.

È utile?

> Scusa se ti rispondo il giorno dopo, spero nel frattempo tu sia andato a
> dormire :)
> Facci sapere se funza.
>
> A presto,
> Fabrizio
>
>
>
>

> ------------------------------------------------------------------------
>
> _______________________________________________
> Zope mailing list
> Zo...@lists.zope.it
> http://lists.zope.it/cgi-bin/mailman/listinfo/zope
>

_______________________________________________
Zope mailing list
Zo...@lists.zope.it
http://lists.zope.it/cgi-bin/mailman/listinfo/zope

Yuri

unread,
Feb 2, 2008, 6:53:06 AM2/2/08
to Gli utilizzatori italiani di Zope
Fabrizio Reale wrote:
>
> Si... confermo, svegliare gli oggetti per cose cosě banali č un MALE :)

> (lo scrivo solo per i novizi, proprio ieri un amico mi diceva che Plone era
> lento a mostrare gli 8700 oggetti che aveva in una cartella con una bella
> vista che li richiamava tutti)
>
http://www.upfrontsystems.co.za/Members/roche/where-im-calling-from/zodb-benchmarks

"Note that there is a undocumented feature in cPickle that I added
years ago to deal with this issue but never got around to pursuing.
Maybe someone else would be able to spend the time to try it out and
report back.

If you set inst_persistent_id, rather than persistent_id, on a
pickler, then the hook will only be called for instances. This
should eliminate that vast majority of the calls."


tradotto, 50% in piů di performance.

In Plone, perň, conclude:

"For an application like Plone an insertion rate of 250 objects per
second results in terrible performance if you consider that storing a
single document instance leads to close to 120 objects being inserted in
a single transaction. And this explains why you can hardly insert more
than 2 or 3 documents per second if you are uploading them into a Plone
site. Separating data into separate BTrees or files will not solve the
problem either since catalog indexes can easily contain 10 million or
more objects in large deployments. If the lookup speed on a large index
is 20 milliseconds and 1 second is the maximum response time you can
afford, realise that you can only do 5 lookups in that second. You see
the problem?"

Massimo Azzolini

unread,
Feb 2, 2008, 11:53:44 AM2/2/08
to Gli utilizzatori italiani di Zope


2008/2/2 Fabrizio Reale <fabrizi...@redomino.com>:
Si... confermo, svegliare gli oggetti per cose così banali è un MALE :)

Non ricordo che versione di Plone stai usando...ma nella 3 c'è
l'indice "object_provides" che è proprio una keyword con le interfacce
dell'oggetto.

buono.
a questo punto però ho una domandina.
dunque, svegliare oggetti è male, ma usare gli adapter è taaanto comodo. come faccio a fare:
adapted_obj = IObj2(obj)
se non ho obj e non è bene fare la getObject()?
 

Scusa se ti rispondo il giorno dopo, spero nel frattempo tu sia andato a
dormire :)

come un angioletto

grazie a tutti

max

Fabrizio Reale

unread,
Feb 2, 2008, 1:32:17 PM2/2/08
to Gli utilizzatori italiani di Zope
Alle sabato 2 febbraio 2008, Massimo Azzolini ha scritto:
> 2008/2/2 Fabrizio Reale <fabrizi...@redomino.com>:
> > Si... confermo, svegliare gli oggetti per cose così banali è un MALE :)
> >
> > Non ricordo che versione di Plone stai usando...ma nella 3 c'è
> > l'indice "object_provides" che è proprio una keyword con le interfacce
> > dell'oggetto.
>
> buono.
> a questo punto però ho una domandina.
> dunque, svegliare oggetti è male, ma usare gli adapter è taaanto comodo.
> come faccio a fare:
> adapted_obj = IObj2(obj)
> se non ho obj e non è bene fare la getObject()?

Beh diciamo che anche il male e il bene sono relativi.
Indipendentemente dagli adapter quando ottieni un oggetto (con qualunque
mezzo: brain, attraversamento, ecc....) tu estrai dei dati dallo ZODB.
E seguendo la logica di ogni sistema devi evitare di fare lavori inutili, nel
mondo Zope: meno oggetti attiva la tua pagina e meglio è.
Poi se tu hai bisogno dei dati di un oggetto non c'è altro modo che
richiamarlo.
Ma se hai bisogno di mostrare per esempio la lista di tutti gli oggetti che
hanno una particolare keyword non puoi richiamarli tutti dallo ZODB e poi
guardarli uno per uno, hanno inventato il catalog apposta.
Se poi la stessa lista ti serve in ogni pagina la situazione è ancora più
grave. Per fortuna Zope e Plone hanno tutti gli strumenti per ovviare a ciò.

Dopo questo piccolo riassunto soprattutto per chi è nuovo al mondo Zope
torniamo alla tua domanda :)

Penso che tu non possa far al tro che richiamare l'oggetto se il tuo
adattatore si aspetta la sua interfaccia.

Poi in un momento di creatività ti condivido un ragionamento che avevo fatto
per un caso simile. I brain sono comunque oggetti e hanno anche
loro "un'interfaccia" (mi perdonino i puristi).
Quindi, magari, forse, può darsi che possa funzionare un adattatamento di un
brain.
Purtroppo non mi sono preso mai il tempo di provarci, se di nuovo non vai a
dormire senza risposte...magari ci riesci tu :)

Argomenti interessanti ;)

A presto,
Fabry

Carmine Noviello

unread,
Feb 3, 2008, 4:11:51 AM2/3/08
to zo...@lists.zope.it
Massimo Azzolini ha scritto:

> beh.. come contraddirti..
>
> però in quel punto l'item è un brain (no?) e per aver l'interfaccia mi
> serve l'oggetto.
> E si diceva che "svegliare" oggetti era il male.
> giusto o sono già sperso in lande desolate di ignoranza?
>
> se posso svegliare l'oggetto allora son con te:
>
> IMyTitle(item.getObject()).getTitle()


Sull'altare delle prestazioni purtroppo quasi sempre finisce per essere
immolata la pulizia del codice. La cosa migliore sarebbe fare come hai
detto tu, invocando l'adattatore. Ma questo potrebbe dar luogo a
problemi di performance. Devi solo sperimentare tu se nel tuo caso è
veramente un problema o no.
Ti dico io come ho affrontato la situazione in un'esperienza "analoga",
dove c'è la piccola complicazione che l'interfaccia non è nota se non
all'atto dell'utilizzo effettivo dell'oggetto. Cmq, la cosa migliore è
aggiungere gli indici nel catalogo e indicizzarti i contenuti che poi ti
servono senza riattivare l'oggetto, settando un subscriber sull'evento
"object modified" e gestirti la catalogazione. O nel caso di un oggetto
archetype based sfruttare "index".

Ciao

Davide Moro

unread,
Feb 4, 2008, 3:24:20 AM2/4/08
to Gli utilizzatori italiani di Zope

Il giorno ven, 01/02/2008 alle 18.49 +0100, Massimo Azzolini ha scritto:
>
>
> 2008/2/1 Davide Moro <david...@redomino.com>:
> Il giorno ven, 01/02/2008 alle 17.41 +0100, Massimo Azzolini
> ha scritto:
> >
> >
> > > if portalType = "Myobj":
>
> Siccome hai una marker interface non utilizzerei il
> portal_type per fare
> il controllo, che ne dici?
>
> beh.. come contraddirti..
>
> però in quel punto l'item è un brain (no?) e per aver l'interfaccia mi
> serve l'oggetto.
> E si diceva che "svegliare" oggetti era il male.
> giusto o sono già sperso in lande desolate di ignoranza?
>
> se posso svegliare l'oggetto allora son con te:
>
> IMyTitle(item.getObject()).getTitle()
>
> e via di adapter. no?

Scusa,
ma nel fine settimana non apro il pc praticamente!
Esiste proprio il catalogo per questo e puoi indicizzare per esempio se
i tuoi oggetti fanno il provides di una certa interfaccia o no mettendo
un metodo apposito indicizzato (altrimenti, meglio ancora come suggeriva
Fabrizio, puoi esplorare la via object_provides).

Per quanto riguarda il controllo sul portal_type: è un vecchio modo di
operare e ti tiri dietro una serie di vecchi problemi (riusabilità del
codice, facilità di manutenzione e gestione, ecc.) che l'architettura a
componenti ti consente di superare in scioltezza. Per esempio: il giorno
che vorrai riutilizzare il tuo codice per un altro oggetto che
implementa la tua IMyTitle devi andare a correggere in giro per il tuo
codice (magari varie centinaia di linee di codice) ogni controllo sul
portal_type?!

Reply all
Reply to author
Forward
0 new messages