зеркало из
https://github.com/viginum-datalab/twscrape.git
synced 2025-10-29 13:06:13 +02:00
raise exception on proxy failed
Этот коммит содержится в:
родитель
fc5eaa84ba
Коммит
a67cd1deb8
@ -49,7 +49,7 @@ class Account(JSONTrait):
|
|||||||
rs["last_used"] = rs["last_used"].isoformat() if rs["last_used"] else None
|
rs["last_used"] = rs["last_used"].isoformat() if rs["last_used"] else None
|
||||||
return rs
|
return rs
|
||||||
|
|
||||||
def make_client(self, proxy: str | None) -> AsyncClient:
|
def make_client(self, proxy: str | None = None) -> AsyncClient:
|
||||||
proxies = [proxy, os.getenv("TWS_PROXY"), self.proxy]
|
proxies = [proxy, os.getenv("TWS_PROXY"), self.proxy]
|
||||||
proxies = [x for x in proxies if x is not None]
|
proxies = [x for x in proxies if x is not None]
|
||||||
proxy = proxies[0] if proxies else None
|
proxy = proxies[0] if proxies else None
|
||||||
|
|||||||
@ -2,7 +2,8 @@ import json
|
|||||||
import os
|
import os
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from httpx import AsyncClient, HTTPStatusError, ProxyError, ReadTimeout, Response
|
import httpx
|
||||||
|
from httpx import AsyncClient, Response
|
||||||
|
|
||||||
from .accounts_pool import Account, AccountsPool
|
from .accounts_pool import Account, AccountsPool
|
||||||
from .logger import logger
|
from .logger import logger
|
||||||
@ -187,7 +188,7 @@ class QueueClient:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
rep.raise_for_status()
|
rep.raise_for_status()
|
||||||
except HTTPStatusError:
|
except httpx.HTTPStatusError:
|
||||||
logger.error(f"Unhandled API response code: {log_msg}")
|
logger.error(f"Unhandled API response code: {log_msg}")
|
||||||
await self._close_ctx(utc.ts() + 60 * 15) # 15 minutes
|
await self._close_ctx(utc.ts() + 60 * 15) # 15 minutes
|
||||||
raise HandledError()
|
raise HandledError()
|
||||||
@ -196,7 +197,8 @@ class QueueClient:
|
|||||||
return await self.req("GET", url, params=params)
|
return await self.req("GET", url, params=params)
|
||||||
|
|
||||||
async def req(self, method: str, url: str, params: ReqParams = None) -> Response | None:
|
async def req(self, method: str, url: str, params: ReqParams = None) -> Response | None:
|
||||||
retry_count = 0
|
unknown_retry, connection_retry = 0, 0
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
ctx = await self._get_ctx() # not need to close client, class implements __aexit__
|
ctx = await self._get_ctx() # not need to close client, class implements __aexit__
|
||||||
if ctx is None:
|
if ctx is None:
|
||||||
@ -208,7 +210,7 @@ class QueueClient:
|
|||||||
await self._check_rep(rep)
|
await self._check_rep(rep)
|
||||||
|
|
||||||
ctx.req_count += 1 # count only successful
|
ctx.req_count += 1 # count only successful
|
||||||
retry_count = 0
|
unknown_retry, connection_retry = 0, 0
|
||||||
return rep
|
return rep
|
||||||
except AbortReqError:
|
except AbortReqError:
|
||||||
# abort all queries
|
# abort all queries
|
||||||
@ -216,11 +218,22 @@ class QueueClient:
|
|||||||
except HandledError:
|
except HandledError:
|
||||||
# retry with new account
|
# retry with new account
|
||||||
continue
|
continue
|
||||||
except (ReadTimeout, ProxyError):
|
except (httpx.ReadTimeout, httpx.ProxyError):
|
||||||
# http transport failed, just retry with same account
|
# http transport failed, just retry with same account
|
||||||
continue
|
continue
|
||||||
|
except httpx.ConnectError as e:
|
||||||
|
# if proxy missconfigured or ???
|
||||||
|
connection_retry += 1
|
||||||
|
if connection_retry >= 3:
|
||||||
|
raise e
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
retry_count += 1
|
unknown_retry += 1
|
||||||
if retry_count >= 3:
|
if unknown_retry >= 3:
|
||||||
logger.warning(f"Unhandled error {type(e)}: {e}")
|
msg = [
|
||||||
|
"Unknown error. Account timeouted for 15 minutes.",
|
||||||
|
"Create issue please: https://github.com/vladkens/twscrape/issues",
|
||||||
|
f"If it mistake, you can unlock account now with `twscrape reset_locks`. Err: {type(e)}: {e}",
|
||||||
|
]
|
||||||
|
|
||||||
|
logger.warning(" ".join(msg))
|
||||||
await self._close_ctx(utc.ts() + 60 * 15) # 15 minutes
|
await self._close_ctx(utc.ts() + 60 * 15) # 15 minutes
|
||||||
|
|||||||
Загрузка…
x
Ссылка в новой задаче
Block a user