blob: 6bec1343b213ea40f62c7bb4add39c24c47055ec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import odoo.http
import json
import logging
from werkzeug.exceptions import BadRequest
import functools
_logger = logging.getLogger(__name__)
class CustomJsonRequest(odoo.http.JsonRequest):
def __init__(self, httprequest):
super(odoo.http.JsonRequest, self).__init__(httprequest)
self.params = {}
request_data_raw = self.httprequest.get_data().decode(self.httprequest.charset)
self.jsonrequest = {}
if request_data_raw.strip():
try:
self.jsonrequest = json.loads(request_data_raw)
except ValueError:
msg = 'Invalid JSON data: %r' % (request_data_raw,)
_logger.info('%s: %s (Handled by CustomJsonRequest)', self.httprequest.path, msg)
raise BadRequest(msg)
else:
_logger.info("CustomJsonRequest: Received empty or whitespace-only JSON body. Treating as empty JSON for webhook.")
self.params = dict(self.jsonrequest.get("params", {}))
self.context = self.params.pop('context', dict(self.session.context))
_original_get_request = odoo.http.Root.get_request
@functools.wraps(_original_get_request)
def _get_request_override(self, httprequest):
_logger.info("--- DEBUG: !!! _get_request_override IS CALLED !!! ---")
_logger.info(f"--- DEBUG: Request Mimetype: {httprequest.mimetype}, Path: {httprequest.path} ---")
if httprequest.mimetype in ("application/json", "application/json-rpc"):
_logger.debug("Odoo HTTP: Using CustomJsonRequest for mimetype: %s", httprequest.mimetype)
return CustomJsonRequest(httprequest)
else:
_logger.debug("Odoo HTTP: Using original get_request for mimetype: %s", httprequest.mimetype)
return _original_get_request(self, httprequest)
odoo.http.Root.get_request = _get_request_override
|