> Cette syntaxe est assez veille, on utilise depuis plus de 2 ans une
> syntaxe Active Record:
> 
>    with Transaction().start('test_lmds_tryton', 0):
>        pool = Pool(TRYTON_DATABASE)
>        pool.init()
>        Product = pool.get('product.product')
>        product = Product(id)
>        product.name
>        ...

Ok, en revanche j’ai toujours le même problème. En fait j’essaye d’accéder à 
product.name dans mon template chameleon et j’ai cette erreur :

    return inst.__getattr__(self.name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/modules/product/product.py",
 line 174, in __getattr__
    return getattr(self.template, name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/model/fields/field.py",
 line 213, in __get__
    return inst.__getattr__(self.name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/modules/product/product.py",
 line 171, in __getattr__
    return super(Product, self).__getattr__(name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/model/modelstorage.py",
 line 1168, in __getattr__
    if self.id < 0:
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/model/fields/field.py",
 line 213, in __get__
    return inst.__getattr__(self.name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/modules/product/product.py",
 line 171, in __getattr__
    return super(Product, self).__getattr__(name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/model/modelstorage.py",
 line 1166, in __getattr__
    return super(ModelStorage, self).__getattr__(name)
  File 
"/home/fabien/DEV/test-lmds/lib/python2.7/site-packages/trytond/model/model.py",
 line 434, in __getattr__
    if name == 'id':
RuntimeError: maximum recursion depth exceeded in cmp

Mon code :

@view_config(name='view', permission='view',
                 renderer='poc:templates/custom-content-default.pt')
    def default_view(self):
        with Transaction().start(TRYTON_DATABASE, TRYTON_USER):
            tryton_pool.init()
            Product = tryton_pool.get('product.product')
            product = Product(self.context.custom_attribute)

        return {
            'product': product,
        }

En revanche, lorsque j’applique à la lettre l’exemple dans le wiki 
(https://code.google.com/p/tryton/wiki/TrytonPyramid) ça fonctionne. Je pense 
que je dois être en dehors du context manager lorsque j’appelle l’attribut name 
à partir de mon template (même si j’indente le return dans le with). J’ai 
essayé de créer un décorateur contenant le contexte manager pour décorer ma vue 
mais ça ne fonctionne pas mieux.
Dans l’exemple pour Django ça a l’air pourtant de fonctionner, ça doit être un 
certain de fonctionnement de Pyramid qui m’échappe.

Répondre à