Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions webservice/components/request_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,14 @@ class BaseRestRequestsAdapter(Component):
# TODO: url and url_params could come from work_ctx
def _request(self, method, url=None, url_params=None, **kwargs):
url = self._get_url(url=url, url_params=url_params)
content_only = kwargs.pop("content_only", True)
content_only = kwargs.pop("content_only", None)
if content_only is None:
_logger.warning(
"The default value of 'content_only' will change from "
"True to False in a future version. "
"Please set it explicitly to avoid unexpected behavior."
)
content_only = True
# TODO: turn on/off debug from webservice setting?
url_to_log = self._sanitize_url_for_log(url)
_logger.info("%s call to %s", method, url_to_log)
Expand Down Expand Up @@ -179,6 +186,14 @@ def _fetch_new_token(self, old_token):

def _request(self, method, url=None, url_params=None, **kwargs):
url = self._get_url(url=url, url_params=url_params)
content_only = kwargs.pop("content_only", None)
if content_only is None:
_logger.warning(
"The default value of 'content_only' will change from "
"True to False in a future version. "
"Please set it explicitly to avoid unexpected behavior."
)
content_only = True
new_kwargs = kwargs.copy()
new_kwargs.update(
{
Expand All @@ -191,7 +206,9 @@ def _request(self, method, url=None, url_params=None, **kwargs):
# pylint: disable=E8106
request = session.request(method, url, **new_kwargs)
request.raise_for_status()
return request.content
if content_only:
return request.content
return request


class WebApplicationOAuth2RestRequestsAdapter(Component):
Expand Down
30 changes: 30 additions & 0 deletions webservice/tests/test_webservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,33 @@ def test_web_service_call_args(self):
responses.calls[0].request.headers["Content-Type"], "application/xml"
)
self.assertEqual(responses.calls[0].request.headers["demo_header"], "HEADER")
@responses.activate
def test_web_service_content_only_default_true_with_warning(self):
"""content_only defaults to True but should log a deprecation warning."""
responses.add(responses.GET, self.url, body="{}")
with self.assertLogs(
"odoo.addons.webservice.components.request_adapter", level="WARNING"
) as log_catcher:
result = self.webservice.call("get")
self.assertEqual(result, b"{}")
self.assertTrue(
any(
"content_only" in message
for message in log_catcher.output
)
)

@responses.activate
def test_web_service_content_only_explicit_false(self):
"""content_only=False should return the full Response object."""
responses.add(responses.GET, self.url, body="{}")
result = self.webservice.call("get", content_only=False)
self.assertEqual(result.content, b"{}")
self.assertEqual(result.status_code, 200)

@responses.activate
def test_web_service_content_only_explicit_true(self):
"""content_only=True should return raw bytes without a warning."""
responses.add(responses.GET, self.url, body="{}")
result = self.webservice.call("get", content_only=True)
self.assertEqual(result, b"{}")
Loading