[FIX] base: XML-RPC serialization error on HTML fields
In 01875541b1, HTML fields (and various
methods) were made to return markupsafe.Markup objects.
However at the time I didn't consider that XML-RPC serialization
remains based on type *identity*, and thus the `Markup` object would
not serialize outbound through XML-RPC, and would blow up instead.
This should fix the issue, by serializing Markup objects as str.
closes odoo/odoo#74684
X-original-commit: 165bd3bf88becc42416e49ad2f430e90675219fa
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
This commit is contained in:
@@ -2,6 +2,7 @@ from datetime import date, datetime
|
||||
from xmlrpc.client import dumps, loads
|
||||
import xmlrpc.client
|
||||
|
||||
from markupsafe import Markup
|
||||
from werkzeug.wrappers import Response
|
||||
|
||||
from odoo.http import Controller, dispatch_rpc, request, route
|
||||
@@ -35,6 +36,7 @@ class OdooMarshaller(xmlrpc.client.Marshaller):
|
||||
dispatch[lazy] = dump_lazy
|
||||
|
||||
dispatch[Command] = dispatch[int]
|
||||
dispatch[Markup] = dispatch[str]
|
||||
|
||||
|
||||
# monkey-patch xmlrpc.client's marshaller
|
||||
|
||||
@@ -18,6 +18,12 @@ class TestXMLRPC(common.HttpCase):
|
||||
super(TestXMLRPC, self).setUp()
|
||||
self.admin_uid = self.env.ref('base.user_admin').id
|
||||
|
||||
def xmlrpc(self, model, method, *args, **kwargs):
|
||||
return self.xmlrpc_object.execute_kw(
|
||||
common.get_db_name(), self.admin_uid, 'admin',
|
||||
model, method, args, kwargs
|
||||
)
|
||||
|
||||
def test_01_xmlrpc_login(self):
|
||||
""" Try to login on the common service. """
|
||||
db_name = common.get_db_name()
|
||||
@@ -45,6 +51,11 @@ class TestXMLRPC(common.HttpCase):
|
||||
'res.partner', 'name_search', "admin"
|
||||
)
|
||||
|
||||
def test_xmlrpc_html_field(self):
|
||||
pid = self.xmlrpc('res.partner', 'create', {'name': 'bob', 'comment': 'sucks'})
|
||||
[p] = self.xmlrpc('res.partner', 'read', pid, ['comment'])
|
||||
self.assertEqual(p['comment'], 'sucks')
|
||||
|
||||
def test_jsonrpc_read_group(self):
|
||||
self._json_call(
|
||||
common.get_db_name(), self.admin_uid, 'admin',
|
||||
|
||||
Reference in New Issue
Block a user