Quelle est la meilleure façon de personnaliser une chaîne d'acquisition de l'objet Zope?

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

  •  28-10-2019
  •  | 
  •  

Question

Pour l'essentiel, je veux vérifier un autre objet pour voir si un attribut est défini il avant de traiter les éléments en object.aq_chain.

Je ne peux pas sembler éviter une récursion infinie lors de la substitution getattr et getattribute.

UPDATE

Exemple:

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

Dans le cas où il ne va pas sans dire, il y a une API que je suis en train de travailler au sein.

Était-ce utile?

La solution

Pour construire des chaînes d'acquisition, vous devez utiliser la méthode __of__ de l'emballage Acquisition:

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

Voir la chapitre Acquisition de la documentation Zope2 pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top