From 09aff57cd03b7d43b84bc5c096977ebe5049459d Mon Sep 17 00:00:00 2001
From: nans
Date: Wed, 9 Sep 2020 10:45:46 +0200
Subject: [PATCH] [IMP] base_jsonify: simplify full parser API when not using
translations
---
base_jsonify/README.rst | 22 ++++++++++++++++++++--
base_jsonify/models/ir_export.py | 5 ++++-
base_jsonify/models/models.py | 9 +++++----
base_jsonify/readme/DESCRIPTION.rst | 22 ++++++++++++++++++++--
base_jsonify/static/description/index.html | 19 +++++++++++++++++--
5 files changed, 66 insertions(+), 11 deletions(-)
diff --git a/base_jsonify/README.rst b/base_jsonify/README.rst
index 998fa7212..6f2dffbea 100644
--- a/base_jsonify/README.rst
+++ b/base_jsonify/README.rst
@@ -90,11 +90,12 @@ To use these features, a full parser follows the following structure:
.. code-block:: python
parser = {
- "resolver": ir.exports.resolver(3),
+ "resolver": 3,
+ "language_agnostic": True,
"langs": {
False: [
{'name': 'description'},
- {'name': 'number', 'resolver': ir.exports.resolver(5)},
+ {'name': 'number', 'resolver': 5},
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
],
'fr_FR': [
@@ -105,6 +106,23 @@ To use these features, a full parser follows the following structure:
}
+Note that a resolver can be passed either as a recordset or as an id, so as to be fully serializable.
+A slightly simpler version in case the translation of fields is not needed,
+but other features like custom resolvers are:
+
+.. code-block:: python
+
+ parser = {
+ "resolver": 3,
+ "language_agnostic": True,
+ "fields": [
+ {'name': 'description'},
+ {'name': 'number', 'resolver': 5},
+ ({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}]),
+ ],
+ }
+
+
A simple parser is simply translated into a full parser at export.
If the global resolver is given, then the json_dict goes through:
diff --git a/base_jsonify/models/ir_export.py b/base_jsonify/models/ir_export.py
index 3229f1feb..2804d179e 100644
--- a/base_jsonify/models/ir_export.py
+++ b/base_jsonify/models/ir_export.py
@@ -99,7 +99,10 @@ class IrExport(models.Model):
options = {"resolver": line.resolver_id, "function": line.function}
update_dict(dict_parser, names, options)
lang_parsers[lang] = convert_dict(dict_parser)
- parser["langs"] = lang_parsers
+ if list(lang_parsers.keys()) == [False]:
+ parser["fields"] = lang_parsers[False]
+ else:
+ parser["langs"] = lang_parsers
if self.global_resolver_id:
parser["resolver"] = self.global_resolver_id
return parser
diff --git a/base_jsonify/models/models.py b/base_jsonify/models/models.py
index 075f8fb71..5ef50cfda 100644
--- a/base_jsonify/models/models.py
+++ b/base_jsonify/models/models.py
@@ -43,7 +43,7 @@ class Base(models.AbstractModel):
result.append((_f(f), _convert_parser(sub)))
return result
- return {"language_agnostic": False, "langs": {False: _convert_parser(parser)}}
+ return {"language_agnostic": False, "fields": _convert_parser(parser)}
@api.model
def _jsonify_bad_parser_error(self, field_name):
@@ -144,11 +144,12 @@ class Base(models.AbstractModel):
resolver = parser.get("resolver")
results = [{} for record in self]
- for lang in parser["langs"]:
- translate = lang or parser["language_agnostic"]
+ parsers = {False: parser["fields"]} if "fields" in parser else parser["langs"]
+ for lang in parsers:
+ translate = lang or parser.get("language_agnostic")
records = self.with_context(lang=lang) if translate else self
for record, json in zip(records, results):
- self._jsonify_record(parser["langs"][lang], record, json)
+ self._jsonify_record(parsers[lang], record, json)
results = self._resolve(resolver, results, self) if resolver else results
return results[0] if one else results
diff --git a/base_jsonify/readme/DESCRIPTION.rst b/base_jsonify/readme/DESCRIPTION.rst
index 0dfcd34cf..200d13d51 100644
--- a/base_jsonify/readme/DESCRIPTION.rst
+++ b/base_jsonify/readme/DESCRIPTION.rst
@@ -63,11 +63,12 @@ To use these features, a full parser follows the following structure:
.. code-block:: python
parser = {
- "resolver": ir.exports.resolver(3),
+ "resolver": 3,
+ "language_agnostic": True,
"langs": {
False: [
{'name': 'description'},
- {'name': 'number', 'resolver': ir.exports.resolver(5)},
+ {'name': 'number', 'resolver': 5},
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
],
'fr_FR': [
@@ -78,6 +79,23 @@ To use these features, a full parser follows the following structure:
}
+Note that a resolver can be passed either as a recordset or as an id, so as to be fully serializable.
+A slightly simpler version in case the translation of fields is not needed,
+but other features like custom resolvers are:
+
+.. code-block:: python
+
+ parser = {
+ "resolver": 3,
+ "language_agnostic": True,
+ "fields": [
+ {'name': 'description'},
+ {'name': 'number', 'resolver': 5},
+ ({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}]),
+ ],
+ }
+
+
A simple parser is simply translated into a full parser at export.
If the global resolver is given, then the json_dict goes through:
diff --git a/base_jsonify/static/description/index.html b/base_jsonify/static/description/index.html
index 2c8d50c00..cda1f510a 100644
--- a/base_jsonify/static/description/index.html
+++ b/base_jsonify/static/description/index.html
@@ -418,11 +418,12 @@ It is also to specify a lang to extract the translation of any given field.
To use these features, a full parser follows the following structure:
parser = {
- "resolver": ir.exports.resolver(3),
+ "resolver": 3,
+ "language_agnostic": True,
"langs": {
False: [
{'name': 'description'},
- {'name': 'number', 'resolver': ir.exports.resolver(5)},
+ {'name': 'number', 'resolver': 5},
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
],
'fr_FR': [
@@ -432,6 +433,20 @@ It is also to specify a lang to extract the translation of any given field.
}
}
+Note that a resolver can be passed either as a recordset or as an id, so as to be fully serializable.
+A slightly simpler version in case the translation of fields is not needed,
+but other features like custom resolvers are:
+
+parser = {
+ "resolver": 3,
+ "language_agnostic": True,
+ "fields": [
+ {'name': 'description'},
+ {'name': 'number', 'resolver': 5},
+ ({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}]),
+ ],
+}
+
A simple parser is simply translated into a full parser at export.
If the global resolver is given, then the json_dict goes through: