Defer patching requests default agent when it is imported
Importing requests module in `trytond/__init__.py` prevents the gevent monkey patch to be applied to the requests module as it is imported before. Closes #14461
This commit is contained in:
1 parent
6ef9085289
commit
40ce993a5b
1 file changed
+27
-13
+27
-13
@@ -2,7 +2,9 @@
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import decimal
|
||||
import importlib
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import warnings
|
||||
from email import charset
|
||||
@@ -10,11 +12,6 @@ from email import charset
|
||||
import __main__
|
||||
from lxml import etree, objectify
|
||||
|
||||
try:
|
||||
from requests import utils as requests_utils
|
||||
except ImportError:
|
||||
requests_utils = None
|
||||
|
||||
__version__ = "7.9.0"
|
||||
__series__ = '.'.join(__version__.split('.')[:2])
|
||||
|
||||
@@ -37,12 +34,29 @@ charset.add_charset('utf-8', charset.QP, charset.QP)
|
||||
etree.set_default_parser(etree.XMLParser(resolve_entities=False))
|
||||
objectify.set_default_parser(objectify.makeparser(resolve_entities=False))
|
||||
|
||||
|
||||
def default_user_agent(name="Tryton"):
|
||||
return f"{name}/{__version__}"
|
||||
|
||||
|
||||
if requests_utils:
|
||||
requests_utils.default_user_agent = default_user_agent
|
||||
|
||||
decimal.DefaultContext.prec = int(os.environ.get('TRYTOND_DECIMAL_PREC', 28))
|
||||
|
||||
|
||||
class _RequestPatchFinder:
|
||||
def find_spec(self, fullname, path, target=None):
|
||||
if fullname != 'requests.utils':
|
||||
return
|
||||
sys.meta_path.remove(self)
|
||||
spec = importlib.util.find_spec(fullname)
|
||||
loader = spec.loader
|
||||
original_exec = loader.exec_module
|
||||
|
||||
def exec_module(module):
|
||||
original_exec(module)
|
||||
self._patch_requests_utils(module)
|
||||
loader.exec_module = exec_module
|
||||
return spec
|
||||
|
||||
@staticmethod
|
||||
def _patch_requests_utils(module):
|
||||
def default_user_agent(name="Tryton"):
|
||||
return f"{name}/{__version__}"
|
||||
module.default_user_agent = default_user_agent
|
||||
|
||||
|
||||
sys.meta_path.insert(0, _RequestPatchFinder())
|
||||
Reference in new issue
Block a user