Skip to content

Commit d492b51

Browse files
committed
fixup! wip: simplify upgrade
1 parent cf72d6f commit d492b51

4 files changed

Lines changed: 46 additions & 33 deletions

File tree

fs_storage/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
"security/ir.model.access.csv",
1818
"wizards/fs_test_connection.xml",
1919
],
20-
"external_dependencies": {"python": ["fsspec>=2024.5.0"]},
20+
"external_dependencies": {"python": ["fsspec>=2024.5.0", "openupgradelib>=3.6.0"]},
2121
"installable": True,
2222
}
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
# Copyright 2026 Camptocamp SA
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
33

4-
import logging
5-
64
from openupgradelib import openupgrade
75

8-
_logger = logging.getLogger(__name__)
9-
106

117
@openupgrade.migrate()
128
def migrate(env, version):
@@ -19,6 +15,5 @@ def migrate(env, version):
1915
limit=1,
2016
)
2117
if not module:
22-
_logger.info("Module fs_storage_environment not found")
2318
return
2419
module.button_install()

fs_storage/migrations/19.0.1.1.2/pre-migration.py

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,69 +9,86 @@
99

1010

1111
def _get_server_env_mixin_fnames(cr, model: str) -> set[str]:
12+
"""Return the core mixin field names present on the model."""
1213
possible_fnames = ("server_env_defaults", "tech_name")
1314
cr.execute(
1415
SQL(
1516
"""
1617
SELECT name
1718
FROM ir_model_fields
1819
WHERE model = %(model)s
19-
AND name IN %(possible_fnames)s
20+
AND name IN %(possible_fnames)s
2021
""",
2122
model=model,
2223
possible_fnames=possible_fnames,
2324
)
2425
)
25-
return set(row[0] for row in cr.fetchall())
26+
return {row[0] for row in cr.fetchall()}
2627

2728

28-
def _get_server_env_mixin_magic_fnames(cr, model: str) -> set[str]:
29-
"""Find all the magic server environment field names for a given model"""
30-
# Get all fields created on-the-fly by the mixin. Following the name patterns:
31-
# - default fields: x_<field_name>_env_default
32-
# - is editable fields: x_<field_name>_env_is_editable
29+
def _get_server_env_mixin_magic_fnames(cr, model):
30+
"""Return the dynamic server_environment helper fields for the model.
31+
32+
These are the fields created on the fly by server.env.mixin:
33+
- x_<field_name>_env_default
34+
- x_<field_name>_env_is_editable
35+
"""
3336
cr.execute(
3437
SQL(
3538
"""
3639
SELECT name
3740
FROM ir_model_fields
3841
WHERE model = %(model)s
39-
AND name LIKE 'x_%%_env_default'
40-
OR name LIKE 'x_%%_env_is_editable'
42+
AND (
43+
name LIKE 'x_%%_env_default'
44+
OR name LIKE 'x_%%_env_is_editable'
45+
)
4146
""",
4247
model=model,
4348
)
4449
)
45-
return set(row[0] for row in cr.fetchall())
50+
return {row[0] for row in cr.fetchall()}
51+
4652

53+
@openupgrade.migrate()
54+
def migrate(env, version):
55+
"""Move XMLIDs to the glue module.
4756
48-
def migrate(cr, version):
57+
This keeps the server_environment ir.model.fields metadata attached to the
58+
new module and preserves field values.
59+
"""
60+
cr = env.cr
4961
if not version:
5062
return
63+
5164
model = "fs.storage"
65+
old_module = "fs_storage"
66+
new_module = "fs_storage_environment"
67+
5268
mixin_fnames = _get_server_env_mixin_fnames(cr, model)
5369
magic_fnames = _get_server_env_mixin_magic_fnames(cr, model)
5470
to_move_fnames = mixin_fnames | magic_fnames
55-
old_module = "fs_storage"
56-
new_module = "fs_storage_environment"
71+
5772
rename_specs = [
5873
(field_xmlid(old_module, model, fname), field_xmlid(new_module, model, fname))
5974
for fname in to_move_fnames
6075
]
6176
openupgrade.rename_xmlids(cr, rename_specs, allow_merge=True)
77+
6278
# Add noupdate to the magic_fnames, to prevent Odoo from deleting them in upgrade
63-
openupgrade.logged_query(
64-
cr,
65-
"""
66-
UPDATE ir_model_data SET noupdate = TRUE
67-
WHERE module = %(module)s
68-
AND name IN %(names)s
69-
""",
70-
dict(
71-
module=new_module,
72-
names=tuple(
73-
field_xmlid(new_module, model, fname).split(".")[1]
74-
for fname in magic_fnames
79+
if magic_fnames:
80+
openupgrade.logged_query(
81+
cr,
82+
"""
83+
UPDATE ir_model_data SET noupdate = TRUE
84+
WHERE module = %(module)s
85+
AND name IN %(names)s
86+
""",
87+
dict(
88+
module=new_module,
89+
names=tuple(
90+
field_xmlid(new_module, model, fname).split(".")[1]
91+
for fname in magic_fnames
92+
),
7593
),
76-
),
77-
)
94+
)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
fsspec>=2024.5.0
33
fsspec>=2025.3.0
44
fsspec[s3]
5+
openupgradelib>=3.6.0
56
python_slugify

0 commit comments

Comments
 (0)