Skip to content

Commit c44c1fc

Browse files
committed
ip
1 parent a97e407 commit c44c1fc

File tree

4 files changed

+114
-107
lines changed

4 files changed

+114
-107
lines changed

src/util/spreadsheet/__init__.py

-22
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,3 @@
1212
from .fields import *
1313
from .models import *
1414
from .misc import *
15-
# try:
16-
# from .fields import *
17-
# from .models import *
18-
# except (ImportError, SyntaxError):
19-
# """spreadsheet utils are not compatible with Python 2.
20-
# But spreadsheet did not exist in version supporting
21-
# python 2. So there's nothing to do anyway.
22-
# """
23-
# _logger.debug("spreadsheet utils not imported")
24-
# breakpoint()
25-
26-
# def rename_field(*args, **kwargs):
27-
# pass
28-
29-
# def rename_model(*args, **kwargs):
30-
# pass
31-
32-
# def remove_field(*args, **kwargs):
33-
# pass
34-
35-
# def remove_model(*args, **kwargs):
36-
# pass

src/util/spreadsheet/fields.py

+109-72
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,63 @@
77

88

99
from .data_wrappers import Spreadsheet, create_data_source_from_cmd
10-
from .misc import apply_in_all_spreadsheets, adapt_view_link_cells, remove_data_source_function, remove_lists, remove_pivots, remove_odoo_charts, transform_data_source_functions
11-
12-
from .revisions import CommandAdapter, Drop, transform_revisions_data
10+
from .misc import (
11+
apply_in_all_spreadsheets,
12+
adapt_view_link_cells,
13+
remove_data_source_function,
14+
remove_lists,
15+
remove_pivots,
16+
remove_odoo_charts,
17+
transform_data_source_functions,
18+
)
19+
20+
from .revisions import CommandAdapter, transform_revisions_data
1321

1422
from odoo.osv import expression
1523

1624
from odoo.upgrade.util.context import adapt_context, clean_context
1725
from odoo.upgrade.util.domains import _adapt_one_domain
1826

27+
28+
# stolen from util.fields:def remove_fields
29+
def remove_adapter(leaf, is_or, negated):
30+
# replace by TRUE_LEAF, unless negated or in a OR operation but not negated
31+
if is_or ^ negated:
32+
return [expression.FALSE_LEAF]
33+
return [expression.TRUE_LEAF]
34+
35+
1936
def rename_field_in_all_spreadsheets(cr, model, old_value, new_value):
20-
apply_in_all_spreadsheets(cr, old_value, (lambda data, revisions_data: rename_field(cr, model, old_value, new_value, data, revisions_data)))
37+
apply_in_all_spreadsheets(
38+
cr,
39+
old_value,
40+
(lambda data, revisions_data: rename_field(cr, model, old_value, new_value, data, revisions_data)),
41+
)
42+
2143

22-
def rename_field(cr, model, old, new, data, revisions = ()):
44+
def rename_field(cr, model, old, new, data, revisions=()):
2345
spreadsheet = Spreadsheet(data)
2446
adapters = _rename_field_in_list(cr, spreadsheet, model, old, new)
25-
adapters += _rename_field_in_pivot(cr, spreadsheet, model, old, new)
26-
adapters += _rename_field_in_chart(cr, spreadsheet, model, old, new)
27-
adapters += _rename_field_in_filters(cr, spreadsheet, model, old, new)
28-
adapters += _rename_field_in_view_link(cr, spreadsheet, model, old, new)
47+
# adapters += _rename_field_in_pivot(cr, spreadsheet, model, old, new)
48+
# adapters += _rename_field_in_chart(cr, spreadsheet, model, old, new)
49+
# adapters += _rename_field_in_filters(cr, spreadsheet, model, old, new)
50+
# adapters += _rename_field_in_view_link(cr, spreadsheet, model, old, new)
2951
return spreadsheet.data, transform_revisions_data(revisions, *adapters)
3052

53+
3154
def remove_field_in_all_spreadsheets(cr, model, field):
32-
apply_in_all_spreadsheets(cr, field, (lambda data, revisions_data: remove_field(cr, model, field, data, revisions_data)))
55+
apply_in_all_spreadsheets(
56+
cr, field, (lambda data, revisions_data: remove_field(cr, model, field, data, revisions_data))
57+
)
3358

3459

3560
def remove_field(cr, model, field, data, revisions=()):
3661
spreadsheet = Spreadsheet(data)
3762
_remove_field_from_filter_matching(cr, spreadsheet, model, field)
38-
adapters = _remove_field_from_list(spreadsheet, model, field)
39-
adapters += _remove_field_from_pivot(spreadsheet, model, field)
40-
adapters += _remove_field_from_graph(spreadsheet, model, field)
41-
adapters += _remove_field_from_view_link(spreadsheet, model, field)
63+
adapters = _remove_field_from_list(cr, spreadsheet, model, field)
64+
adapters += _remove_field_from_pivot(cr, spreadsheet, model, field)
65+
adapters += _remove_field_from_graph(cr, spreadsheet, model, field)
66+
adapters += _remove_field_from_view_link(cr, spreadsheet, model, field)
4267
spreadsheet.clean_empty_cells()
4368
return spreadsheet.data, transform_revisions_data(revisions, *adapters)
4469

@@ -185,6 +210,27 @@ def _rename_data_source_field(cr, data_source, model, old, new):
185210
data_source.order_by = _rename_order_by(data_source.order_by, old, new)
186211

187212

213+
def _remove_data_source_field(cr, data_source, model, field):
214+
if data_source.model == model:
215+
data_source.domain = (
216+
_adapt_one_domain(
217+
cr, model, field, "ignored", data_source.model, data_source.domain, remove_adapter, force_adapt=True
218+
)
219+
or data_source.domain
220+
)
221+
222+
adapt_context(data_source.context, field, "ignored")
223+
if data_source.order_by:
224+
data_source.order_by = _remove_order_by(data_source.order_by, field)
225+
226+
227+
def _remove_order_by(order_by, field):
228+
if isinstance(order_by, list):
229+
return [order for order in order_by if order["field"] != field]
230+
if order_by and order_by["field"] == field:
231+
return None
232+
return order_by
233+
188234
def _rename_order_by(order_by, old, new):
189235
if isinstance(order_by, list):
190236
return [_rename_order_by(order, old, new) for order in order_by]
@@ -269,6 +315,8 @@ def adapt_view_link(action):
269315
return adapt_view_link_cells(spreadsheet, adapt_view_link)
270316

271317

318+
## Removal
319+
272320

273321
def _remove_list_functions(content, list_ids, field):
274322
"""Remove functions such as ODOO.LIST(1, 'field') or ODOO.LIST.HEADER(1, 'field')"""
@@ -279,33 +327,18 @@ def filter_func(func_call_ast):
279327
return remove_data_source_function(content, list_ids, {"ODOO.LIST", "ODOO.LIST.HEADER"}, filter_func)
280328

281329

282-
def _remove_field_from_list(spreadsheet: Spreadsheet, model, field):
283-
# remove only functions where the field appears otherwise
284-
remove_column = []
285-
for list in spreadsheet.lists:
286-
if list.model == model:
287-
remove_column.append(list.id)
288-
list.fields = [column for column in list.fields if column != field]
330+
def _remove_field_from_list(cr, spreadsheet: Spreadsheet, model, field):
331+
def _remove_field(olist):
332+
_remove_data_source_field(cr, olist, model, field)
333+
if olist.model == model:
334+
olist.fields = [column for column in olist.fields if column != field]
289335

290-
for cell in spreadsheet.cells:
291-
cell["content"] = _remove_list_functions(cell["content"], remove_column, field)
292-
lists_to_delete = [
293-
list.id
294-
for list in spreadsheet.lists
295-
if list.model == model and field in (list_order_fields(list) + domain_fields(list.domain))
296-
]
297-
# remove entirely lists where the field appears in the domain or in the order by
298-
adapters = remove_lists(
299-
spreadsheet,
300-
lists_to_delete,
301-
lambda list: list.model == model and field in (list_order_fields(list) + domain_fields(list.domain)),
302-
)
336+
for olist in spreadsheet.lists:
337+
_remove_field(olist)
303338

304339
def adapt_insert(cmd):
305340
olist = create_data_source_from_cmd(cmd)
306-
if olist.model == model and field in olist.fields:
307-
remove_column.append(olist.id)
308-
olist.fields = [column for column in olist.fields if column != field]
341+
_remove_field(olist)
309342

310343
# collect all list models inserted by INSERT_ODOO_LIST
311344
# because we need the models to adapt RE_INSERT_ODOO_LIST
@@ -318,49 +351,57 @@ def collect_list(cmd):
318351
def adapt_re_insert(cmd):
319352
olist = create_data_source_from_cmd(cmd)
320353
if list_models[olist.id] == model:
321-
olist.fields = [column for column in olist.fields if column != field]
354+
_remove_field(olist)
322355

323-
return adapters + (
356+
return (
324357
CommandAdapter("INSERT_ODOO_LIST", collect_list),
325358
CommandAdapter("INSERT_ODOO_LIST", adapt_insert),
326359
CommandAdapter("RE_INSERT_ODOO_LIST", adapt_re_insert),
327-
CommandAdapter(
328-
"UPDATE_CELL",
329-
lambda cmd: dict(cmd, content=_remove_list_functions(cmd.get("content"), remove_column, field)),
330-
),
331360
)
332361

333362

334-
def _remove_field_from_pivot(spreadsheet: Spreadsheet, model, field):
335-
pivots_to_delete = [
336-
pivot.id for pivot in spreadsheet.pivots if pivot.model == model and field in pivot_fields(pivot)
337-
]
363+
def _remove_field_from_pivot(cr, spreadsheet: Spreadsheet, model, field):
364+
def _remove_field(pivot):
365+
_remove_data_source_field(cr, pivot, model, field)
366+
if pivot.model == model:
367+
pivot.col_group_by = [f for f in pivot.col_group_by if f != field]
368+
pivot.row_group_by = [f for f in pivot.row_group_by if f != field]
369+
pivot.measures = [f for f in pivot.measures if f != field]
338370

339-
adapters = remove_pivots(
340-
spreadsheet,
341-
pivots_to_delete,
342-
lambda pivot: pivot.model == model and field in pivot_fields(pivot),
343-
)
344-
return adapters
371+
for pivot in spreadsheet.pivots:
372+
_remove_field(pivot)
345373

374+
def adapt_insert(cmd):
375+
pivot = create_data_source_from_cmd(cmd)
376+
_remove_field(pivot)
346377

347-
def _remove_field_from_graph(spreadsheet: Spreadsheet, model, field):
348-
charts_to_delete = [
349-
chart.id for chart in spreadsheet.odoo_charts if chart.model == model and field in chart_fields(chart)
350-
]
351-
return remove_odoo_charts(
352-
spreadsheet,
353-
charts_to_delete,
354-
lambda chart: chart.model == model and field in chart_fields(chart),
355-
)
378+
return (CommandAdapter("INSERT_PIVOT", adapt_insert),)
356379

357380

358-
def _remove_field_from_view_link(spreadsheet: Spreadsheet, model, field):
381+
def _remove_field_from_graph(cr, spreadsheet: Spreadsheet, model, field):
382+
def _remove_field(chart):
383+
_remove_data_source_field(cr, chart, model, field)
384+
if chart.model == model:
385+
chart.measure = chart.measure if chart.measure != field else None
386+
387+
for chart in spreadsheet.odoo_charts:
388+
_remove_field(chart)
389+
390+
def adapt_create_chart(cmd):
391+
if cmd["definition"]["type"].startswith("odoo_"):
392+
chart = create_data_source_from_cmd(cmd)
393+
_remove_field(chart)
394+
395+
return (CommandAdapter("CREATE_CHART", adapt_create_chart),)
396+
397+
398+
def _remove_field_from_view_link(cr, spreadsheet: Spreadsheet, model, field):
359399
def adapt_view_link(action):
360400
if action["modelName"] == model:
361-
changed = clean_context(action["context"], field)
362-
if changed or field in domain_fields(action["domain"]):
363-
return Drop
401+
clean_context(action["context"], field)
402+
action["domain"] = _adapt_one_domain(
403+
cr, model, field, "ignored", model, action["domain"], remove_adapter, force_adapt=True
404+
)
364405

365406
return adapt_view_link_cells(spreadsheet, adapt_view_link)
366407

@@ -384,6 +425,7 @@ def adapter(*args, **kwargs):
384425
domain = _adapt_one_domain(cr, field_model, field, "ignored", data_source_model, domain, adapter=adapter)
385426
return domain == expression.FALSE_DOMAIN
386427

428+
387429
def domain_fields(domain):
388430
"""return all field names used in the domain
389431
>>> domain_fields([['field1', '=', 1], ['field2', '=', 2]])
@@ -398,17 +440,11 @@ def pivot_measure_fields(pivot):
398440

399441
def pivot_fields(pivot):
400442
"""return all field names used in a pivot definition"""
401-
# try:
402443
fields = set(pivot.col_group_by + pivot.row_group_by + pivot_measure_fields(pivot) + domain_fields(pivot.domain))
403444
measure = pivot.order_by and pivot.order_by["field"]
404445
if measure and measure != "__count":
405446
fields.add(measure)
406447
return fields
407-
# except:
408-
# import ipdb;ipdb.set_trace()
409-
# return []
410-
411-
412448

413449

414450
def chart_fields(chart):
@@ -419,5 +455,6 @@ def chart_fields(chart):
419455
fields.add(measure)
420456
return fields
421457

458+
422459
def list_order_fields(list_definition):
423460
return [order["field"] for order in list_definition.order_by]

src/util/spreadsheet/misc.py

+2-11
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,10 @@ def apply_in_all_spreadsheets(cr, like_pattern, callback):
103103
revisions_data = []
104104
revisions_ids = []
105105

106-
# if like_pattern == "tax_audit":
107-
# import ipdb;ipdb.set_trace()
108106
for revision_id, commands in get_revisions(cr, "res_model", "res_id", like_pattern):
109107
revisions_data.append(json.loads(commands))
110108
revisions_ids.append(revision_id)
111-
data, revisions = callback({}, revisions_data)
112-
# write_attachment(cr, attachment_id, data)
113-
print("wooooooooooooooooot\n"*20)
114-
print(revisions)
109+
_, revisions = callback({}, revisions_data)
115110
for rev_id, revision in zip(revisions_ids, revisions):
116111
cr.execute(
117112
"""
@@ -338,15 +333,12 @@ def remove_odoo_charts(spreadsheet: Spreadsheet, chart_ids: List[str], insert_cm
338333
spreadsheet.delete_figures(*chart_ids)
339334

340335
def adapt_create_chart(cmd):
341-
# import ipdb;ipdb.set_trace()
342-
343336
chart = create_data_source_from_cmd(cmd)
344337
if cmd["definition"]["type"].startswith("odoo_") and insert_cmd_predicate(chart):
345338
chart_ids.append(cmd["id"])
346339
return Drop
347340

348341
def adapt_chart_cmd_with_id(cmd):
349-
# import ipdb;ipdb.set_trace()
350342

351343
if cmd["id"] in chart_ids:
352344
return Drop
@@ -355,7 +347,6 @@ def adapt_global_filters(cmd):
355347
if cmd.get("chart"):
356348
for chart_id in chart_ids:
357349
cmd["chart"].pop(chart_id, None)
358-
# import ipdb;ipdb.set_trace()
359350
return (
360351
CommandAdapter("CREATE_CHART", adapt_create_chart),
361352
CommandAdapter("UPDATE_CHART", adapt_chart_cmd_with_id),
@@ -370,7 +361,7 @@ def remove_data_source_function(content, data_source_ids, functions, filter_ast=
370361
>>> remove_data_source_function('=ODOO.PIVOT(1, "revenue")', [1], {"ODOO.PIVOT"})
371362
''
372363
>>> remove_data_source_function('=ODOO.PIVOT(2, "revenue")', [1], {"ODOO.PIVOT"})
373-
'=ODOO.PIVOT(2, "revenue")'
364+
'=ODOO.PIVOT(2, "revenue")'.
374365
"""
375366

376367
def adapter(fun_call):

src/util/spreadsheet/revisions.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
Drop = object()
1111

12+
# not used
1213
def transform_revisions(cr, revisions, *adapters: Iterable[CommandAdapter]):
1314
if not len(adapters):
1415
return
@@ -40,15 +41,15 @@ def transform_revisions(cr, revisions, *adapters: Iterable[CommandAdapter]):
4041
""",
4142
[json.dumps(data), revision_id],
4243
)
44+
4345
def transform_revisions_data(revisions, *adapters: Iterable[CommandAdapter]):
44-
# import ipdb;ipdb.set_trace()
4546
for data in revisions:
4647
commands = data.get("commands", [])
4748
if not commands:
4849
continue
4950
new_commands = transform_commands(commands, *adapters)
5051
if new_commands is None:
51-
new_commands = []
52+
continue
5253
# ensures it's jsonyfiable (converts tuples to lists) (probably should be removed)
5354
data["commands"] = json.loads(json.dumps(new_commands))
5455
return revisions

0 commit comments

Comments
 (0)