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: