summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/patch/http_override.py
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