Skip to content

Commit 9354a87

Browse files
committed
chunk_processing: add json processor
1 parent 9d3a54f commit 9354a87

File tree

4 files changed

+39
-23
lines changed

4 files changed

+39
-23
lines changed
+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from . import processor
22
from . import processor_xml
3+
from . import processor_json
34
from . import splitter
45
from . import splitter_json
56
from . import splitter_xml

chunk_processing/components/processor.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,24 @@ class ChunkProcessor(AbstractComponent):
1010
_name = "chunk.processor"
1111
_collection = "chunk.item"
1212

13-
def run(self):
13+
def _import_item(self):
1414
raise NotImplementedError
15+
16+
def _prepare_error_message(self, idx, item, error):
17+
return {
18+
"rows": {"from": idx, "to": idx},
19+
"type": type(error).__name__,
20+
"message": str(error),
21+
}
22+
23+
def run(self):
24+
res = {"ids": [], "messages": []}
25+
for idx, item in enumerate(self._parse_data()):
26+
try:
27+
with self.env.cr.savepoint():
28+
res["ids"] += self._import_item(item)
29+
except Exception as e:
30+
if self.env.context.get("chunk_raise_if_exception"):
31+
raise
32+
res["messages"].append(self._prepare_error_message(idx, item, e))
33+
return res
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright 2021 Akretion (https://www.akretion.com).
2+
# @author Sébastien BEAU <[email protected]>
3+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
4+
5+
import base64
6+
import json
7+
8+
from odoo.addons.component.core import AbstractComponent
9+
10+
11+
class ChunkProcessorJson(AbstractComponent):
12+
_name = "chunk.importer.json"
13+
_inherit = "chunk.processor"
14+
_collection = "chunk.item"
15+
16+
def _parse_data(self):
17+
return json.loads(base64.b64decode(self.collection.data))

chunk_processing/components/processor_xml.py

+1-22
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,10 @@
1111

1212
class ChunkProcessorXml(AbstractComponent):
1313
_name = "chunk.importer.xml"
14+
_inherit = "chunk.processor"
1415
_collection = "chunk.item"
1516

1617
def _parse_data(self):
1718
return objectify.fromstring(
1819
base64.b64decode(self.collection.data)
1920
).iterchildren()
20-
21-
def _import_item(self):
22-
raise NotImplementedError
23-
24-
def _prepare_error_message(self, idx, item, error):
25-
return {
26-
"rows": {"from": idx, "to": idx},
27-
"type": type(error).__name__,
28-
"message": str(error),
29-
}
30-
31-
def run(self):
32-
res = {"ids": [], "messages": []}
33-
for idx, item in enumerate(self._parse_data()):
34-
try:
35-
with self.env.cr.savepoint():
36-
res["ids"] += self._import_item(item)
37-
except Exception as e:
38-
if self.env.context.get("chunk_raise_if_exception"):
39-
raise
40-
res["messages"].append(self._prepare_error_message(idx, item, e))
41-
return res

0 commit comments

Comments
 (0)