Migrazione con rinomina modulo, compatibile con OpenUpgrade e Odoo SA
Simone Rubino edited this page 2023-11-20 16:39:59 +01:00

Il problema

Esistono due modi di migrare i dati di un modulo:

Quando un modulo cambia nome (diciamo da vecchio a nuovo) tra una versione major di Odoo e l'altra, gli script di migrazione non vengono lanciati dalla migrazione eseguita da Odoo SA.

In OpenUpgrade questo problema non sussiste perché è possibile elencare i moduli che hanno cambiato nome nel file apriori.py (github.com/OCA/OpenUpgrade@d77b865baa/openupgrade_scripts/apriori.py (L6)); grazie a questa configurazione il modulo viene rinominato prima di essere aggiornato, quindi gli script di migrazione vengono eseguiti.

Una soluzione

Usare un pre_init_hook (https://www.odoo.com/documentation/16.0/developer/reference/backend/module.html#manifest).

Nel database migrato da Odoo SA, per eseguire la migrazione del modulo vecchio, l'utente dovrà quindi installare il modulo nuovo.

Implementazione

  • Aggiungere al __manifest__.py un pre_init_hook.

  • Nel hook aggiunto, se il modulo vecchio è presente:

    1. Rinominare il modulo.

    2. Eseguire la migrazione.

  • Nella cartella standard delle migrazioni migrations/.., eseguire la migrazione.

  • Inserire la rinomina del modulo nel file apriori.py: è sufficiente una PR tipo https://github.com/OCA/OpenUpgrade/pull/4094.

Esempio: github.com/OCA/l10n-italy@1194fb209a.

Note

Il codice della migrazione deve essere eseguibile da due punti diversi: come sempre è meglio evitare di ripetere il codice.

Qualunque libreria esterna usata nel pre_init_hook (ad esempio https://github.com/OCA/openupgradelib) è da aggiungere alle external_dependencies del modulo.

Durante la migrazione, il nome del modulo è già nuovo perché è già stato rinominato in entrambi i flussi di migrazione:

  • In Odoo SA: l'utente sta attivamente installando il modulo nuovo.
  • In OpenUpgrade: il modulo è stato rinominato grazie al file apriori.py.

Questo non è proprio intuitivo, ad esempio può venir naturale voler correggere github.com/OCA/l10n-italy@1194fb209a/l10n_it_financial_statements_report/hooks.py (L112) (ogni riferimento a fatti o persone è https://github.com/OCA/l10n-italy/issues/3575 😉).