Qual è il modo migliore per personalizzare la catena di acquisizione di un oggetto Zope?

StackOverflow https://stackoverflow.com/questions/8855358

  •  28-10-2019
  •  | 
  •  

Domanda

In sostanza, voglio controllare un altro oggetto per vedere se è impostato un attributo prima di elaborare gli elementi in oggetto.aq_chain.

Non riesco a evitare l'infinita ricorsione quando si sfugge a getAttr e getATtribute.

AGGIORNARE

Esempio:

import ExtensionClass, Acquisition

class Folder(ExtensionClass.Base): pass

class File(Acquisition.Implicit): pass

parent1 = Folder()
parent1.foo = 1
parent2 = Folder()
parent2.foo = 2

child = File()
parent1.child = child
child.otherparent = parent2

print parent1.child.foo # prints 1, but i want it to print 2

Nel caso in cui non sia ovvio, c'è un'API in cui sto cercando di lavorare.

È stato utile?

Soluzione

Per costruire catene di acquisizione, è necessario utilizzare il __of__ Metodo del wrapper di acquisizione:

>>> wrapped = child.__of__(parent2)
>>> assert wrapped.aq_parent is parent2
True

Vedere il Capitolo di acquisizione della documentazione Zope2 per maggiori informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top