[IMP] base_jsonify: simplify full parser API when not using translations
parent
8380df640e
commit
09aff57cd0
|
@ -90,11 +90,12 @@ To use these features, a full parser follows the following structure:
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
parser = {
|
parser = {
|
||||||
"resolver": ir.exports.resolver(3),
|
"resolver": 3,
|
||||||
|
"language_agnostic": True,
|
||||||
"langs": {
|
"langs": {
|
||||||
False: [
|
False: [
|
||||||
{'name': 'description'},
|
{'name': 'description'},
|
||||||
{'name': 'number', 'resolver': ir.exports.resolver(5)},
|
{'name': 'number', 'resolver': 5},
|
||||||
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
|
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
|
||||||
],
|
],
|
||||||
'fr_FR': [
|
'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.
|
A simple parser is simply translated into a full parser at export.
|
||||||
|
|
||||||
If the global resolver is given, then the json_dict goes through:
|
If the global resolver is given, then the json_dict goes through:
|
||||||
|
|
|
@ -99,7 +99,10 @@ class IrExport(models.Model):
|
||||||
options = {"resolver": line.resolver_id, "function": line.function}
|
options = {"resolver": line.resolver_id, "function": line.function}
|
||||||
update_dict(dict_parser, names, options)
|
update_dict(dict_parser, names, options)
|
||||||
lang_parsers[lang] = convert_dict(dict_parser)
|
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:
|
if self.global_resolver_id:
|
||||||
parser["resolver"] = self.global_resolver_id
|
parser["resolver"] = self.global_resolver_id
|
||||||
return parser
|
return parser
|
||||||
|
|
|
@ -43,7 +43,7 @@ class Base(models.AbstractModel):
|
||||||
result.append((_f(f), _convert_parser(sub)))
|
result.append((_f(f), _convert_parser(sub)))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
return {"language_agnostic": False, "langs": {False: _convert_parser(parser)}}
|
return {"language_agnostic": False, "fields": _convert_parser(parser)}
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _jsonify_bad_parser_error(self, field_name):
|
def _jsonify_bad_parser_error(self, field_name):
|
||||||
|
@ -144,11 +144,12 @@ class Base(models.AbstractModel):
|
||||||
resolver = parser.get("resolver")
|
resolver = parser.get("resolver")
|
||||||
|
|
||||||
results = [{} for record in self]
|
results = [{} for record in self]
|
||||||
for lang in parser["langs"]:
|
parsers = {False: parser["fields"]} if "fields" in parser else parser["langs"]
|
||||||
translate = lang or parser["language_agnostic"]
|
for lang in parsers:
|
||||||
|
translate = lang or parser.get("language_agnostic")
|
||||||
records = self.with_context(lang=lang) if translate else self
|
records = self.with_context(lang=lang) if translate else self
|
||||||
for record, json in zip(records, results):
|
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
|
results = self._resolve(resolver, results, self) if resolver else results
|
||||||
return results[0] if one else results
|
return results[0] if one else results
|
||||||
|
|
|
@ -63,11 +63,12 @@ To use these features, a full parser follows the following structure:
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
parser = {
|
parser = {
|
||||||
"resolver": ir.exports.resolver(3),
|
"resolver": 3,
|
||||||
|
"language_agnostic": True,
|
||||||
"langs": {
|
"langs": {
|
||||||
False: [
|
False: [
|
||||||
{'name': 'description'},
|
{'name': 'description'},
|
||||||
{'name': 'number', 'resolver': ir.exports.resolver(5)},
|
{'name': 'number', 'resolver': 5},
|
||||||
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
|
({'name': 'partner_id', 'alias': 'partners'}, [{'name': 'display_name'}])
|
||||||
],
|
],
|
||||||
'fr_FR': [
|
'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.
|
A simple parser is simply translated into a full parser at export.
|
||||||
|
|
||||||
If the global resolver is given, then the json_dict goes through:
|
If the global resolver is given, then the json_dict goes through:
|
||||||
|
|
|
@ -418,11 +418,12 @@ It is also to specify a lang to extract the translation of any given field.</p>
|
||||||
<p>To use these features, a full parser follows the following structure:</p>
|
<p>To use these features, a full parser follows the following structure:</p>
|
||||||
<pre class="code python literal-block">
|
<pre class="code python literal-block">
|
||||||
<span class="n">parser</span> <span class="o">=</span> <span class="p">{</span>
|
<span class="n">parser</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
<span class="s2">"resolver"</span><span class="p">:</span> <span class="n">ir</span><span class="o">.</span><span class="n">exports</span><span class="o">.</span><span class="n">resolver</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span>
|
<span class="s2">"resolver"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||||
|
<span class="s2">"language_agnostic"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="s2">"langs"</span><span class="p">:</span> <span class="p">{</span>
|
<span class="s2">"langs"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
<span class="kc">False</span><span class="p">:</span> <span class="p">[</span>
|
<span class="kc">False</span><span class="p">:</span> <span class="p">[</span>
|
||||||
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'description'</span><span class="p">},</span>
|
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'description'</span><span class="p">},</span>
|
||||||
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'number'</span><span class="p">,</span> <span class="s1">'resolver'</span><span class="p">:</span> <span class="n">ir</span><span class="o">.</span><span class="n">exports</span><span class="o">.</span><span class="n">resolver</span><span class="p">(</span><span class="mi">5</span><span class="p">)},</span>
|
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'number'</span><span class="p">,</span> <span class="s1">'resolver'</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span>
|
||||||
<span class="p">({</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'partner_id'</span><span class="p">,</span> <span class="s1">'alias'</span><span class="p">:</span> <span class="s1">'partners'</span><span class="p">},</span> <span class="p">[{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'display_name'</span><span class="p">}])</span>
|
<span class="p">({</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'partner_id'</span><span class="p">,</span> <span class="s1">'alias'</span><span class="p">:</span> <span class="s1">'partners'</span><span class="p">},</span> <span class="p">[{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'display_name'</span><span class="p">}])</span>
|
||||||
<span class="p">],</span>
|
<span class="p">],</span>
|
||||||
<span class="s1">'fr_FR'</span><span class="p">:</span> <span class="p">[</span>
|
<span class="s1">'fr_FR'</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
@ -432,6 +433,20 @@ It is also to specify a lang to extract the translation of any given field.</p>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
<p>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:</p>
|
||||||
|
<pre class="code python literal-block">
|
||||||
|
<span class="n">parser</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"resolver"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||||
|
<span class="s2">"language_agnostic"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="s2">"fields"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'description'</span><span class="p">},</span>
|
||||||
|
<span class="p">{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'number'</span><span class="p">,</span> <span class="s1">'resolver'</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span>
|
||||||
|
<span class="p">({</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'partner_id'</span><span class="p">,</span> <span class="s1">'alias'</span><span class="p">:</span> <span class="s1">'partners'</span><span class="p">},</span> <span class="p">[{</span><span class="s1">'name'</span><span class="p">:</span> <span class="s1">'display_name'</span><span class="p">}]),</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
<p>A simple parser is simply translated into a full parser at export.</p>
|
<p>A simple parser is simply translated into a full parser at export.</p>
|
||||||
<p>If the global resolver is given, then the json_dict goes through:</p>
|
<p>If the global resolver is given, then the json_dict goes through:</p>
|
||||||
<pre class="code python literal-block">
|
<pre class="code python literal-block">
|
||||||
|
|
Loading…
Reference in New Issue