From 1a49c7c59e39ccdb5ceb8bb9f8edeee78ec8b20b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 5 Oct 2023 07:44:21 +0800 Subject: [PATCH] try fix --- app/modules/douban/apiv2.py | 9 +++++++-- app/modules/themoviedb/tmdbv3api/tmdb.py | 23 ++++++++++++++++------- app/utils/http.py | 13 +++++++++++-- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/modules/douban/apiv2.py b/app/modules/douban/apiv2.py index eacb3d10..7aac5120 100644 --- a/app/modules/douban/apiv2.py +++ b/app/modules/douban/apiv2.py @@ -155,8 +155,13 @@ class DoubanApi(metaclass=Singleton): def __sign(cls, url: str, ts: int, method='GET') -> str: url_path = parse.urlparse(url).path raw_sign = '&'.join([method.upper(), parse.quote(url_path, safe=''), str(ts)]) - return base64.b64encode(hmac.new(cls._api_secret_key.encode(), raw_sign.encode(), hashlib.sha1).digest() - ).decode() + return base64.b64encode( + hmac.new( + cls._api_secret_key.encode(), + raw_sign.encode(), + hashlib.sha1 + ).digest() + ).decode() @classmethod @lru_cache(maxsize=settings.CACHE_CONF.get('douban')) diff --git a/app/modules/themoviedb/tmdbv3api/tmdb.py b/app/modules/themoviedb/tmdbv3api/tmdb.py index b544fe2e..ea7bea26 100644 --- a/app/modules/themoviedb/tmdbv3api/tmdb.py +++ b/app/modules/themoviedb/tmdbv3api/tmdb.py @@ -8,6 +8,7 @@ from functools import lru_cache import requests import requests.exceptions +from app.utils.http import RequestUtils from .exceptions import TMDbException logger = logging.getLogger(__name__) @@ -24,7 +25,13 @@ class TMDb(object): TMDB_DOMAIN = "TMDB_DOMAIN" REQUEST_CACHE_MAXSIZE = None - def __init__(self, obj_cached=True): + _req = None + + def __init__(self, obj_cached=True, session=None): + if session is not None: + self._req = RequestUtils(session=session, proxies=self.proxies) + else: + self._req = RequestUtils(session=requests.Session(), proxies=self.proxies) self._remaining = 40 self._reset = None self._timeout = 15 @@ -129,9 +136,13 @@ class TMDb(object): @lru_cache(maxsize=REQUEST_CACHE_MAXSIZE) def cached_request(self, method, url, data, json): - with requests.Session() as s: - return s.request(method, url, data=data, json=json, - timeout=self._timeout, proxies=self.proxies) + return self.request(method, url, data, json) + + def request(self, method, url, data, json): + if method == "GET": + return self._req.get_res(url, params=data, json=json) + else: + return self._req.post_res(url, data=data, json=json) def cache_clear(self): return self.cached_request.cache_clear() @@ -152,9 +163,7 @@ class TMDb(object): if self.cache and self.obj_cached and call_cached and method != "POST": req = self.cached_request(method, url, data, json) else: - with requests.Session() as s: - req = s.request(method, url, data=data, json=json, - timeout=self._timeout, proxies=self.proxies) + req = self.request(method, url, data, json) headers = req.headers diff --git a/app/utils/http.py b/app/utils/http.py index 4330da62..cac43677 100644 --- a/app/utils/http.py +++ b/app/utils/http.py @@ -91,12 +91,19 @@ class RequestUtils: except requests.exceptions.RequestException: return None - def get_res(self, url: str, params: dict = None, - allow_redirects: bool = True, raise_exception: bool = False) -> Optional[Response]: + def get_res(self, url: str, + params: dict = None, + data: Any = None, + json: dict = None, + allow_redirects: bool = True, + raise_exception: bool = False + ) -> Optional[Response]: try: if self._session: return self._session.get(url, params=params, + data=data, + json=json, verify=False, headers=self._headers, proxies=self._proxies, @@ -106,6 +113,8 @@ class RequestUtils: else: return requests.get(url, params=params, + data=data, + json=json, verify=False, headers=self._headers, proxies=self._proxies,