jsonifier: fix get_json_parser caching
The resolver was returned as a full recordset, hence its cursor could diverge from the original one and get closed while the other was still active.pull/3205/head
parent
2e7ee2269b
commit
10eac2b7fa
|
@ -109,7 +109,8 @@ class IrExports(models.Model):
|
||||||
if line.target:
|
if line.target:
|
||||||
names = line.target.split("/")
|
names = line.target.split("/")
|
||||||
function = line.instance_method_name
|
function = line.instance_method_name
|
||||||
options = {"resolver": line.resolver_id, "function": function}
|
# resolver must be passed as ID to avoid cache issues
|
||||||
|
options = {"resolver": line.resolver_id.id, "function": 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)
|
||||||
if list(lang_parsers.keys()) == [False]:
|
if list(lang_parsers.keys()) == [False]:
|
||||||
|
@ -117,7 +118,7 @@ class IrExports(models.Model):
|
||||||
else:
|
else:
|
||||||
parser["langs"] = lang_parsers
|
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.id
|
||||||
if self.language_agnostic:
|
if self.language_agnostic:
|
||||||
parser["language_agnostic"] = self.language_agnostic
|
parser["language_agnostic"] = self.language_agnostic
|
||||||
return parser
|
return parser
|
||||||
|
|
|
@ -100,6 +100,9 @@ class Base(models.AbstractModel):
|
||||||
value = rec._jsonify_value(field, rec[field.name])
|
value = rec._jsonify_value(field, rec[field.name])
|
||||||
resolver = field_dict.get("resolver")
|
resolver = field_dict.get("resolver")
|
||||||
if resolver:
|
if resolver:
|
||||||
|
if isinstance(resolver, int):
|
||||||
|
# cached versions of the parser are stored as integer
|
||||||
|
resolver = self.env["ir.exports.resolver"].browse(resolver)
|
||||||
value, json_key = self._jsonify_record_handle_resolver(
|
value, json_key = self._jsonify_record_handle_resolver(
|
||||||
rec, field, resolver, json_key
|
rec, field, resolver, json_key
|
||||||
)
|
)
|
||||||
|
@ -206,7 +209,9 @@ class Base(models.AbstractModel):
|
||||||
if isinstance(parser, list):
|
if isinstance(parser, list):
|
||||||
parser = convert_simple_to_full_parser(parser)
|
parser = convert_simple_to_full_parser(parser)
|
||||||
resolver = parser.get("resolver")
|
resolver = parser.get("resolver")
|
||||||
|
if isinstance(resolver, int):
|
||||||
|
# cached versions of the parser are stored as integer
|
||||||
|
resolver = self.env["ir.exports.resolver"].browse(resolver)
|
||||||
results = [{} for record in self]
|
results = [{} for record in self]
|
||||||
parsers = {False: parser["fields"]} if "fields" in parser else parser["langs"]
|
parsers = {False: parser["fields"]} if "fields" in parser else parser["langs"]
|
||||||
for lang in parsers:
|
for lang in parsers:
|
||||||
|
|
Loading…
Reference in New Issue