Frissítési szkriptek¶
Egy frissítési szkript egy Python fájl, amely egy migrate() nevű függvényt tartalmaz, amelyet a frissítési folyamat meghív egy modul frissítése során.
- migrate(cr, version)¶
- Paraméterek
cr (
Cursor) – aktuális adatbázis kurzorversion (str) – a modul telepített verziója
Általában ez a függvény egy vagy több SQL lekérdezést hajt végre, és hozzáférhet az Odoo ORM-hez, valamint a Frissítési segédprogramok-hoz is.
Frissítési szkriptek írása¶
A frissítési szkriptek egy meghatározott fa struktúrát követnek egy elnevezési konvencióval, amely meghatározza, mikor hajtódnak végre.
A frissítési szkript útvonalának struktúrája $module/migrations/$version/pre,post,end-*.py, ahol $module az a modul, amelyhez a szkript fut, $version a modul teljes verziója (beleértve az Odoo főverzióját és a modul kisebb verzióját), és {pre|post|end}-*.py az a fájl, amelyet végre kell hajtani. A fájl neve határozza meg a fázist és a sorrendet, amelyben végrehajtásra kerül az adott modul és verzió esetében.
Megjegyzés
From Odoo 13 the top-level directory for the upgrade scripts can also be named upgrades. This
naming is preferred since it has the correct meaning: migrate can be confused with moving out
of Odoo. Thus $module/upgrades/$version/ is also valid.
Megjegyzés
A frissítési szkriptek csak akkor hajtódnak végre, amikor a modult frissítik. Ezért a $version könyvtárban beállított modul kisebb verziójának magasabbnak kell lennie, mint a modul telepített verziója, és egyenlőnek vagy alacsonyabbnak kell lennie a modul frissített verziójával.
Example
Egy egyedi awesome_partner nevű modul frissítési szkriptjének könyvtárstruktúrája, amelyet az Odoo 17-en 2.0 verzióra frissítettek.
awesome_partner/
|-- migrations/
| |-- 17.0.2.0/
| | |-- pre-exclamation.py
Two upgrade scripts examples with the content of the pre-exclamation.py, file adding
„!” at the end of partners» names:
import logging
_logger = logging.getLogger(__name__)
def migrate(cr, version):
cr.execute("UPDATE res_partner SET name = name || '!'")
_logger.info("Updated %s partners", cr.rowcount)
import logging
from odoo.upgrade import util
_logger = logging.getLogger(__name__)
def migrate(cr, version):
env = util.env(cr)
partners = env["res.partner"].search([])
for partner in partners:
partner.name += "!"
_logger.info("Updated %s partners", len(partners))
Vegye figyelembe, hogy a második példában a szkript kihasználja a Frissítési segédprogramok előnyeit az ORM eléréséhez. Nézze meg a dokumentációt, hogy többet megtudjon erről a könyvtárról.
A frissítési szkriptek fázisai¶
A frissítési folyamat három fázisból áll minden modul minden verziója esetében:
Az előfázis, mielőtt a modul betöltődik.
A utófázis, miután a modul és annak függőségei betöltődtek és frissültek.
A végfázis, miután az összes modul betöltődött és frissült az adott verzióhoz.
A frissítési szkriptek a fájlneveik első része alapján a megfelelő fázisba vannak csoportosítva. Minden fázison belül a fájlok lexikális sorrendben kerülnek végrehajtásra.
Példa szkriptek végrehajtási sorrendje egy modulhoz egy verzióban
pre-10-do_something.pypre-20-something_else.pypost-do_something.pypost-something.pyend-01-migrate.pyend-migrate.py