10
10
import glob
11
11
import yaml
12
12
import importlib
13
+ import requests
13
14
14
15
15
16
class BaseMigrationScript (object ):
@@ -25,6 +26,35 @@ class BaseMigrationScript(object):
25
26
_GLOBAL_FUNCTIONS = [] # [function_object]
26
27
_module_path = ""
27
28
29
+ def _get_controller_data (self , version_from_to ):
30
+ # data = request.get(url, version_from, version_to)
31
+ # version_from_to:
32
+ # - migrate_100_allways.py
33
+ # - migrate_160_170.py
34
+ # - migrate_allways.py
35
+ # [0] - migrate
36
+ # [1] - version_from
37
+ # [2] - version_to
38
+ list_version_from_to = version_from_to .split ("_" )
39
+ if len (list_version_from_to ) != 3 or "allways" in list_version_from_to :
40
+ return False
41
+ version_from = list_version_from_to [1 ]
42
+ version_to = list_version_from_to [2 ]
43
+ return self ._get_changes_from_adhoc (version_from , version_to )
44
+
45
+ def _get_changes_from_adhoc (self , init_version_name , target_version_name ):
46
+ base_url = "https://adhoc.com.ar"
47
+ endpoint = "/version_changes/{from_version}/{to_version}" .format (
48
+ from_version = init_version_name , to_version = target_version_name
49
+ )
50
+ uri = base_url + endpoint
51
+ self ._requests = requests .Session ()
52
+ response = self ._requests .get (uri )
53
+ if response and response .ok :
54
+ data_version_changes = response .json ()
55
+ return data_version_changes
56
+ return False
57
+
28
58
def parse_rules (self ):
29
59
script_parts = inspect .getfile (self .__class__ ).split ("/" )
30
60
migrate_from_to = script_parts [- 1 ].split ("." )[0 ]
@@ -100,6 +130,58 @@ def parse_rules(self):
100
130
rules [rule ]["doc" ].update (new_rules )
101
131
elif rules [rule ]["type" ] == TYPE_ARRAY :
102
132
rules [rule ]["doc" ].extend (new_rules )
133
+
134
+ # Read form controller
135
+ data_version_changes = self ._get_controller_data (migrate_from_to )
136
+ if data_version_changes :
137
+ for change in data_version_changes .values ():
138
+ # {'2': {
139
+ # 'change_type': 'rename',
140
+ # 'major_version_id': '17.0',
141
+ # 'model': False,
142
+ # 'field': False,
143
+ # 'model_type': 'model',
144
+ # 'old_name': 'mail.channel',
145
+ # 'new_name': 'discuss.channel',
146
+ # 'notes': '<p>Más información sobre este cambio <a href="https://github.com/odoo/odoo/pull/118354/" target="_blank">en PR 118354</a></p>'
147
+ # }
148
+ # }
149
+
150
+ if (
151
+ change ["change_type" ] == "rename"
152
+ and change ["model_type" ] == "model"
153
+ ):
154
+ # [(old.model.name, new.model.name, more_info)]
155
+ new_rules = [
156
+ [change ["old_name" ], change ["new_name" ], change ["notes" ]]
157
+ ]
158
+ rules ["_RENAMED_MODELS" ]["doc" ].extend (new_rules )
159
+
160
+ if (
161
+ change ["change_type" ] == "rename"
162
+ and change ["model_type" ] == "field"
163
+ ):
164
+ # [(model_name, old_field_name, new_field_name, more_info), ...)]
165
+ new_rules = [
166
+ [change ["model" ], change ["old_name" ], change ["new_name" ], change ["notes" ]]
167
+ ]
168
+ rules ["_RENAMED_FIELDS" ]["doc" ].extend (new_rules )
169
+
170
+ if (
171
+ change ["change_type" ] == "remove"
172
+ and change ["model_type" ] == "model"
173
+ ):
174
+ # [(old.model.name, more_info)]
175
+ new_rules = [[change ["old_name" ], change ["notes" ]]]
176
+ rules ["_REMOVED_MODELS" ]["doc" ].extend (new_rules )
177
+
178
+ if (
179
+ change ["change_type" ] == "remove"
180
+ and change ["model_type" ] == "field"
181
+ ):
182
+ # [(model_name, field_name, more_info), ...)]
183
+ new_rules = [[change ["model" ], change ["old_name" ], change ["notes" ]]]
184
+ rules ["_REMOVED_FIELDS" ]["doc" ].extend (new_rules )
103
185
# extend
104
186
for rule , data in rules .items ():
105
187
rtype = data ["type" ]
0 commit comments