From 3ed88c83c529d328b17ad101cc82f37537097df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Wed, 26 Nov 2025 21:50:01 +0100 Subject: [PATCH] Register a MappingProxyType marshalling function for both JSON-RPC and XML-RPC Closes #14387 --- trytond/trytond/protocols/jsonrpc.py | 2 ++ trytond/trytond/protocols/xmlrpc.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/trytond/trytond/protocols/jsonrpc.py b/trytond/trytond/protocols/jsonrpc.py index 359c1cab9e..71fd207407 100644 --- a/trytond/trytond/protocols/jsonrpc.py +++ b/trytond/trytond/protocols/jsonrpc.py @@ -5,6 +5,7 @@ import datetime import gzip import json from decimal import Decimal +from types import MappingProxyType from werkzeug.exceptions import ( BadRequest, Conflict, Forbidden, HTTPException, InternalServerError, @@ -100,6 +101,7 @@ JSONEncoder.register(datetime.timedelta, '__class__': 'timedelta', 'seconds': o.total_seconds(), }) +JSONEncoder.register(MappingProxyType, dict) def _bytes_encoder(o): diff --git a/trytond/trytond/protocols/xmlrpc.py b/trytond/trytond/protocols/xmlrpc.py index bceded3c16..e7234bf770 100644 --- a/trytond/trytond/protocols/xmlrpc.py +++ b/trytond/trytond/protocols/xmlrpc.py @@ -6,6 +6,7 @@ import logging import xmlrpc.client as client # convert decimal to float before marshalling: from decimal import Decimal +from types import MappingProxyType import defusedxml.xmlrpc from werkzeug.exceptions import ( @@ -86,6 +87,7 @@ def dump_struct(self, value, write, escape=client.escape): client.Marshaller.dispatch[dict] = dump_struct client.Marshaller.dispatch[ImmutableDict] = dump_struct +client.Marshaller.dispatch[MappingProxyType] = dump_struct class XMLRPCDecoder(object):