Skip to content

Commit c27bc48

Browse files
committed
almost but concurrent access
1 parent 4f9db71 commit c27bc48

File tree

6 files changed

+34
-24
lines changed

6 files changed

+34
-24
lines changed

src/util/fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def make_index_name(table_name, column_name):
3737
return "%s_%s_index" % (table_name, column_name)
3838

3939

40-
from .. import spreadsheet
40+
from . import spreadsheet
4141
from .const import ENVIRON
4242
from .context import adapt_context, clean_context
4343
from .domains import _adapt_one_domain, _replace_path, _valid_path_to, adapt_domains

src/util/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import logging
1010
import re
1111

12-
from .. import spreadsheet
12+
from . import spreadsheet
1313
from .const import ENVIRON
1414
from .fields import IMD_FIELD_PATTERN, remove_field
1515
from .helpers import _ir_values_value, _validate_model, model_of_table, table_of_model

src/util/spreadsheet/fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from odoo.upgrade.util.domains import _adapt_one_domain
1818

1919
def rename_field_in_all_spreadsheets(cr, model, old_value, new_value):
20-
apply_in_all_spreadsheets(cr, lambda data, revisions_data: rename_field(cr, model, old_value, new_value, data, revisions_data))
20+
apply_in_all_spreadsheets(cr, old_value, (lambda data, revisions_data: rename_field(cr, model, old_value, new_value, data, revisions_data)))
2121

2222
def rename_field(cr, model, old, new, data, revisions = ()):
2323
spreadsheet = Spreadsheet(data)
@@ -29,7 +29,7 @@ def rename_field(cr, model, old, new, data, revisions = ()):
2929
return spreadsheet.data, transform_revisions_data(revisions, *adapters)
3030

3131
def remove_field_in_all_spreadsheets(cr, model, field):
32-
apply_in_all_spreadsheets(cr, lambda data, revisions_data: remove_field(cr, model, field, data, revisions_data))
32+
apply_in_all_spreadsheets(cr, model, (lambda data, revisions_data: remove_field(cr, model, field, data, revisions_data)))
3333

3434
def remove_field(cr, model, field, data, revisions=()):
3535
spreadsheet = Spreadsheet(data)

src/util/spreadsheet/misc.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
import re
33
import json
4+
import logging
45

56
from typing import Union, Callable, Dict, List
67

@@ -14,6 +15,8 @@
1415
from .revisions import CommandAdapter, Drop
1516
from odoo.upgrade.util.misc import version_gte
1617

18+
_logger = logging.getLogger(__name__)
19+
1720

1821
def read_spreadsheet_attachments(cr, like_pattern="%"):
1922
yield from read_spreadsheet_initial_data(cr, like_pattern)
@@ -25,15 +28,16 @@ def read_spreadsheet_snapshots(cr, like_pattern="%"):
2528
"""
2629
SELECT id, res_model, res_id, db_datas
2730
FROM ir_attachment
28-
WHERE res_model IN ['spreadsheet.dashboard', 'documents.document']
31+
WHERE res_model IN ('spreadsheet.dashboard', 'documents.document')
2932
AND res_field = 'spreadsheet_snapshot'
3033
AND db_datas LIKE %s
3134
""",
3235
[like_pattern],
3336
)
37+
# TODO LIKE probably doesn't work because the field is of type bytea
3438
for attachment_id, res_model, res_id, db_datas in cr.fetchall():
3539
if db_datas:
36-
yield attachment_id, res_model, res_id, json.loads(db_datas)
40+
yield attachment_id, res_model, res_id, json.loads(db_datas.tobytes())
3741

3842

3943
def read_spreadsheet_initial_data(cr, like_pattern="%"):
@@ -50,31 +54,33 @@ def read_spreadsheet_initial_data(cr, like_pattern="%"):
5054
# TODO there are excel files in there!
5155
for document_id, attachment_id, db_datas in cr.fetchall():
5256
if db_datas:
53-
yield attachment_id, "documents.document", document_id, json.loads(db_datas)
57+
# print(db_datas)
58+
yield attachment_id, "documents.document", document_id, json.loads(db_datas.tobytes())
5459
data_field = "spreadsheet_binary_data" if version_gte("saas~16.3") else "data"
5560
cr.execute(
5661
"""
5762
SELECT id, res_model, res_id, db_datas
5863
FROM ir_attachment
59-
WHERE res_model IN = 'spreadsheet.dashboard'
64+
WHERE res_model = 'spreadsheet.dashboard'
6065
AND res_field = %s
6166
AND db_datas LIKE %s
6267
""",
6368
[data_field, like_pattern],
6469
)
6570
for attachment_id, res_model, res_id, db_datas in cr.fetchall():
6671
if db_datas:
67-
yield attachment_id, res_model, res_id, json.loads(db_datas)
72+
yield attachment_id, res_model, res_id, json.loads(db_datas.tobytes())
6873

6974
def apply_in_all_spreadsheets(cr, like_pattern, callback):
75+
_logger.info("upgrading initial data and revisions")
7076
# upgrade the initial data and all revisions based on it
7177
for attachment_id, res_model, res_id, db_datas in read_spreadsheet_initial_data(cr):
7278
revisions_data = []
7379
revisions_ids = []
7480
for revision_id, commands in get_revisions(cr, res_model, res_id, like_pattern):
7581
revisions_data.append(json.loads(commands))
7682
revisions_ids.append(revision_id)
77-
data, revisions = callback(cr, db_datas, revisions_data)
83+
data, revisions = callback(db_datas, revisions_data)
7884
write_attachment(cr, attachment_id, data)
7985
for revision_id, revision in zip(revisions_ids, revisions):
8086
cr.execute(
@@ -85,22 +91,25 @@ def apply_in_all_spreadsheets(cr, like_pattern, callback):
8591
""",
8692
[json.dumps(revision), revision_id],
8793
)
94+
_logger.info("upgrading snapshots")
8895
# upgrade snapshots
8996
for attachment_id, _res_model, _res_id, db_datas in read_spreadsheet_snapshots(cr):
9097
data, revisions = callback(cr, db_datas, [])
9198
write_attachment(cr, attachment_id, data)
9299

93100

94101
def write_attachment(cr, attachment_id, data):
102+
_logger.info("replacing attachment %s", attachment_id)
95103
cr.execute(
96104
"""
97105
UPDATE ir_attachment
98106
SET db_datas=%s
99107
WHERE id=%s
100108
""",
101-
[json.dumps(data), attachment_id]
109+
[json.dumps(data).encode(), attachment_id]
102110
)
103111

112+
104113
def get_revisions(cr, res_model, res_id, like_pattern):
105114
if version_gte("16.0"):
106115
cr.execute(
@@ -134,8 +143,9 @@ def upgrade_data(cr, upgrade_callback):
134143
SET db_datas=%s
135144
WHERE id=%s
136145
""",
137-
[json.dumps(upgraded_data), attachment_id],
146+
[json.dumps(upgraded_data).encode(), attachment_id],
138147
)
148+
_logger.info("spreadsheet json data upgraded")
139149

140150

141151
def transform_data_source_functions(content, data_source_ids, functions, adapter):

src/util/spreadsheet/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
def rename_model_in_all_spreadsheets(cr, old_value, new_value):
8-
apply_in_all_spreadsheets(cr, lambda data, revisions_data: rename_model(old_value, new_value, data, revisions_data))
8+
apply_in_all_spreadsheets(cr, old_value, (lambda data, revisions_data: rename_model(old_value, new_value, data, revisions_data)))
99

1010
# TODO remove cr argument
1111
def rename_model(old, new, data, revisions = ()):
@@ -18,7 +18,7 @@ def rename_model(old, new, data, revisions = ()):
1818
return spreadsheet.data, transform_revisions_data(revisions, *adapters)
1919

2020
def remove_model_in_all_spreadsheets(cr, model):
21-
apply_in_all_spreadsheets(cr, lambda data, revisions_data: remove_model(model, data, revisions_data))
21+
apply_in_all_spreadsheets(cr, model, (lambda data, revisions_data: remove_model(model, data, revisions_data)))
2222

2323
def remove_model(model: str, data, revisions = ()) -> str:
2424
spreadsheet = Spreadsheet(data)

src/util/spreadsheet/o_spreadsheet.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ def _create_empty_workbook(sheet_name: str = "Sheet1") -> dict:
4444
}
4545

4646

47-
def upgrade_data(data, upgrade_functions, to_version, version_field="version"):
48-
data = load(data)
49-
upgrade_functions.sort(key=lambda x: x[0])
50-
for upgrade_version, upgrade in upgrade_functions:
51-
if data.get(version_field, 0) < upgrade_version:
52-
upgrade(data)
53-
data[version_field] = upgrade_version
54-
if upgrade_version == to_version:
55-
return data
56-
return data
47+
# def upgrade_data(data, upgrade_functions, to_version, version_field="version"):
48+
# data = load(data)
49+
# upgrade_functions.sort(key=lambda x: x[0])
50+
# for upgrade_version, upgrade in upgrade_functions:
51+
# if data.get(version_field, 0) < upgrade_version:
52+
# upgrade(data)
53+
# data[version_field] = upgrade_version
54+
# if upgrade_version == to_version:
55+
# return data
56+
# return data
5757

5858

5959
# Reference of a column header (eg. A, AB)

0 commit comments

Comments
 (0)