-
-
Notifications
You must be signed in to change notification settings - Fork 307
Migrazione con rinomina modulo, compatibile con OpenUpgrade e Odoo SA
Esistono due modi di migrare i dati di un modulo:
- OpenUpgrade (https://github.com/OCA/OpenUpgrade)
- Odoo SA (https://upgrade.odoo.com)
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
(https://github.com/OCA/OpenUpgrade/blob/d77b865baa194d8e5e6f6dc0d9fbfa14971fb56d/openupgrade_scripts/apriori.py#L6); grazie a questa configurazione il modulo viene rinominato prima di essere aggiornato, quindi gli script di migrazione vengono eseguiti.
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.
-
Aggiungere al
__manifest__.py
unpre_init_hook
. -
Nel hook aggiunto, se il modulo vecchio è presente:
-
Rinominare il modulo.
-
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: https://github.com/OCA/l10n-italy/commit/1194fb209a8f97410cbe780251de72637dde7d0d.
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 https://github.com/OCA/l10n-italy/blob/1194fb209a8f97410cbe780251de72637dde7d0d/l10n_it_financial_statements_report/hooks.py#L112 (ogni riferimento a fatti o persone è https://github.com/OCA/l10n-italy/issues/3575 😉).