details:   https://code.tryton.org/tryton/commit/928f7b95d4a4
branch:    default
user:      Cédric Krier <[email protected]>
date:      Thu Aug 27 13:08:43 2026 +0200
description:
        Support explicit request context in URLAccessor
diffstat:

 trytond/CHANGELOG      |   1 +
 trytond/trytond/url.py |  57 +++++++++++++++++++++++++++----------------------
 2 files changed, 32 insertions(+), 26 deletions(-)

diffs (97 lines):

diff -r e56f603ce8a8 -r 928f7b95d4a4 trytond/CHANGELOG
--- a/trytond/CHANGELOG Sat Jun 06 16:16:47 2026 +0200
+++ b/trytond/CHANGELOG Thu Aug 27 13:08:43 2026 +0200
@@ -1,3 +1,4 @@
+* Add explicit request context in URLAccessor
 * Retry unfinished queued tasks
 * Add a timer to prevent requests from lasting longer than their timeout
 * Apply mixin to Database and TableHandler from configuration
diff -r e56f603ce8a8 -r 928f7b95d4a4 trytond/trytond/url.py
--- a/trytond/trytond/url.py    Sat Jun 06 16:16:47 2026 +0200
+++ b/trytond/trytond/url.py    Thu Aug 27 13:08:43 2026 +0200
@@ -24,54 +24,59 @@
         self._protocol = protocol
 
     @classmethod
-    def is_secure(cls):
-        context = Transaction().context
-        if context:
-            request = context.get('_request')
-            if request and request['is_secure']:
-                return True
+    def is_secure(cls, request=None):
+        if request is None:
+            context = Transaction().context
+            if context:
+                request = context.get('_request')
+        if request and request['is_secure']:
+            return True
         return bool(
             config.get('ssl', 'certificate')
             or config.get('ssl', 'privatekey'))
 
     @classmethod
-    def host(cls):
-        context = Transaction().context
-        if context:
-            request = context.get('_request')
-            if request:
-                return request['http_host']
+    def host(cls, request=None):
+        if request is None:
+            context = Transaction().context
+            if context:
+                request = context.get('_request')
+        if request:
+            return request['http_host']
         return HOSTNAME
 
     @classmethod
-    def http_host(cls):
+    def http_host(cls, request=None):
         return urllib.parse.urlunsplit((
                 'http' + ('s' if cls.is_secure() else ''),
-                cls.host(), '', '', ''))
+                cls.host(request=request), '', '', ''))
 
     @classmethod
-    def http_root_path(cls):
-        context = Transaction().context
-        if context:
-            request = context.get('_request')
-            if request:
-                return request['root_path']
+    def http_root_path(cls, request=None):
+        if request is None:
+            context = Transaction().context
+            if context:
+                request = context.get('_request')
+        if request:
+            return request['root_path']
         return ROOT_PATH
 
     @classmethod
-    def http_base(cls):
-        return urllib.parse.urljoin(cls.http_host(), cls.http_root_path())
+    def http_base(cls, request=None):
+        return urllib.parse.urljoin(
+            cls.http_host(request=request),
+            cls.http_root_path(request=request))
 
     @property
-    def protocol(self):
+    def protocol(self, request=None):
         if self._protocol == 'http':
-            return 'http' + ('s' if self.is_secure() else '')
+            return 'http' + ('s' if self.is_secure(request=request) else '')
         return self._protocol
 
     @property
-    def root_path(self):
+    def root_path(self, request=None):
         if self._protocol == 'http':
-            return self.http_root_path()
+            return self.http_root_path(request=request)
         return '/'
 
     @property

Reply via email to