migrate aiohttp helper from cloud to open source (#572)
This commit is contained in:
@@ -416,3 +416,8 @@ class FailedToGetCurrentValueOfDropdown(SkyvernException):
|
|||||||
super().__init__(
|
super().__init__(
|
||||||
f"Failed to get current value of {dropdowm_type} dropdown. element_id={element_id}, failure_reason={fail_reason}"
|
f"Failed to get current value of {dropdowm_type} dropdown. element_id={element_id}, failure_reason={fail_reason}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class HttpException(SkyvernException):
|
||||||
|
def __init__(self, status_code: int, url: str, msg: str | None = None) -> None:
|
||||||
|
super().__init__(f"HTTP Exception, status_code={status_code}, url={url}" + (f", msg={msg}" if msg else ""))
|
||||||
|
|||||||
45
skyvern/forge/sdk/core/aiohttp_helper.py
Normal file
45
skyvern/forge/sdk/core/aiohttp_helper.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import asyncio
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
import structlog
|
||||||
|
|
||||||
|
from skyvern.exceptions import HttpException
|
||||||
|
|
||||||
|
LOG = structlog.get_logger()
|
||||||
|
DEFAULT_REQUEST_TIMEOUT = 30
|
||||||
|
|
||||||
|
|
||||||
|
async def aiohttp_get_json(
|
||||||
|
url: str,
|
||||||
|
params: dict[str, Any] | None = None,
|
||||||
|
headers: dict[str, str] | None = None,
|
||||||
|
cookies: dict[str, str] | None = None,
|
||||||
|
retry: int = 0,
|
||||||
|
proxy: str | None = None,
|
||||||
|
timeout: int = DEFAULT_REQUEST_TIMEOUT,
|
||||||
|
raise_exception: bool = True,
|
||||||
|
retry_timeout: float = 0,
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=timeout)) as session:
|
||||||
|
count = 0
|
||||||
|
while count <= retry:
|
||||||
|
try:
|
||||||
|
async with session.get(
|
||||||
|
url,
|
||||||
|
params=params,
|
||||||
|
headers=headers,
|
||||||
|
cookies=cookies,
|
||||||
|
proxy=proxy,
|
||||||
|
) as response:
|
||||||
|
if response.status == 200:
|
||||||
|
return await response.json()
|
||||||
|
if raise_exception:
|
||||||
|
raise HttpException(response.status, url)
|
||||||
|
LOG.error(f"Failed to fetch data from {url}", status_code=response.status)
|
||||||
|
return {}
|
||||||
|
except Exception:
|
||||||
|
if retry_timeout > 0:
|
||||||
|
await asyncio.sleep(retry_timeout)
|
||||||
|
count += 1
|
||||||
|
raise Exception(f"Failed to fetch data from {url}")
|
||||||
Reference in New Issue
Block a user