Saltar al contenido principal
Versión: Tryton 8.0 (LTS)

9. Extender módulos sin romperlos

Tryton 8.0 · curso práctico versionado

Objetivos

  • extender un modelo core mediante PoolMeta
  • preservar la herencia cooperativa
  • modificar vistas mediante referencias XML estables

Modelo mental

Este concepto debe entenderse como parte de un sistema transaccional: la interfaz ayuda al usuario, el servidor conserva las reglas y la base persiste el resultado. El Pool compone clases de todos los módulos instalados. Su extensión participa en la composición; no posee el modelo completo ni toda la cadena de métodos.

Práctica guiada

  1. Declare como dependencia el módulo propietario.
  2. Use PoolMeta y el nombre técnico exacto.
  3. Llame a super conservando argumentos y retorno.
  4. Añada únicamente el campo o regla mínima.
  5. Pruebe junto a otros módulos que extiendan el mismo método.

Ejemplo mínimo

from trytond.model import fields
from trytond.pool import PoolMeta

class Party(metaclass=PoolMeta):
__name__ = 'party.party'
favorite_author = fields.Many2One(
'library.author', "Favorite Author")

@classmethod
def create(cls, vlist):
parties = super().create(vlist)
# Post-process only what this module owns.
return parties

# __init__.py
Pool.register(Party, module='library', type_='model')

Cómo leer el ejemplo

Nunca copie una clase core para cambiar un método: congelaría comportamiento antiguo y omitiría otras extensiones. La herencia XML debe usar identificadores estables y XPath estrechos.

Ejercicio

Extienda party.party, añada un campo al formulario, instale otra extensión de party y demuestre que ambas cadenas se ejecutan.

Realice el ejercicio primero con un caso mínimo, después agregue un caso inválido y convierta ambos en pruebas repetibles.

Resultado verificable

La extensión desaparece limpiamente sin activar el módulo y convive con otras extensiones instaladas.

Errores frecuentes

  • omitir super
  • cambiar una firma pública
  • depender del orden de instalación
  • reemplazar una vista core completa

Criterio para avanzar

  • Puedo explicar la diferencia entre los conceptos sin mirar el código.
  • El caso válido y el inválido tienen pruebas.
  • Probé con un usuario sin privilegios administrativos.
  • Sé cómo actualizar y cómo recuperar la base de entrenamiento.

Versión y referencias

La serie 8.0 requiere como mínimo Python 3.10 según los metadatos oficiales. El servidor oficial ya declara su proyecto mediante pyproject.toml; los módulos nuevos deben construirse como paquetes modernos y comprobar el contenido del wheel. No confunda ese mínimo histórico con la versión de Python que haya certificado su organización.

Esta edición fija ejemplos y dependencias en la serie 8.0. Consulte el tutorial oficial 8.0, la API del servidor y el código de esa rama antes de trasladar el patrón a producción.