# 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