# HG changeset patch # User Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr> # Date 1660229696 -7200 # Thu Aug 11 16:54:56 2022 +0200 # Branch 13.0 # Node ID 42c8bbfecee41c0e71dcdcc09674c7b3942d6c9c # Parent 62eb3b73a373e0ab38815ddde15a65e680ba1424 ✨ Redner server an use an unix socket too so also handle it diff --git a/NEWS.rst b/NEWS.rst --- a/NEWS.rst +++ b/NEWS.rst @@ -5,6 +5,11 @@ 13.0.3.1.0 ========== +(forward port of 11.0.2.6.0) + +Redner server an use an unix socket too so also handle it. + + (forward port of 11.0.2.5.0) * Configurable timeout for redner calls, default is 20 seconds. diff --git a/README.rst b/README.rst --- a/README.rst +++ b/README.rst @@ -1,3 +1,4 @@ +====== Redner ====== diff --git a/__manifest__.py b/__manifest__.py --- a/__manifest__.py +++ b/__manifest__.py @@ -34,5 +34,6 @@ "views/report_redner.xml", "views/menu.xml", ], + "external_dependencies": {"python": ["requests_unixsocket"]}, "demo": [], } diff --git a/redner.py b/redner.py --- a/redner.py +++ b/redner.py @@ -1,16 +1,13 @@ import logging import time +from urllib.parse import quote import requests from odoo import _ from odoo.exceptions import ValidationError -try: - from urllib.parse import urljoin -except ImportError: - from urlparse import urljoin - +import requests_unixsocket _logger = logging.getLogger(__name__) @@ -21,20 +18,26 @@ Args: api_key(str): provide your Redner API key. - server_url(str): Redner server URL. + server_url(str): Redner server URL or socket path. timeout(float): Timeout per Redner call, in seconds. """ self.api_key = api_key - self.server_url = server_url self.account = account self.timeout = timeout - self.session = requests.sessions.Session() + if server_url.startswith("/"): + self.session = requests_unixsocket.Session() + self.server_url = "http+unix://{}/api/".format( + quote(server_url, safe="") + ) + else: + self.session = requests.sessions.Session() + self.server_url = server_url self.templates = Templates(self) def call(self, path, http_verb="post", **params): - """Call redner with the specified paramters. + """Call redner with the specified parameters. Delegate to ``call_impl``; this is a wrapper to have some retries before giving up as redner sometimes mistakenly rejects our queries. """ @@ -62,11 +65,13 @@ if not self.server_url: raise ValidationError( - "Cannot find redner config url. " - "Please add it in odoo.conf or in ir.config_parameter" + _( + "Cannot find redner config url. " + "Please add it in odoo.conf or in ir.config_parameter" + ) ) - url = urljoin(self.server_url, path) + url = self.server_url + path _http_verb = http_verb.upper() _logger.info("Redner: Calling %s...", _http_verb) @@ -92,7 +97,7 @@ response = r.json() except Exception: # If we cannot decode JSON then it's an API error - # having response as text could help debuggin with sentry + # having response as text could help debugging with sentry response = r.text if not str(r.status_code).startswith("2"): diff --git a/requirements b/requirements new file mode 100644 --- /dev/null +++ b/requirements @@ -0,0 +1,1 @@ +requests_unixsocket