70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
import json
|
|
import os
|
|
from io import BytesIO
|
|
|
|
from aiohttp import ClientSession, web
|
|
|
|
from app import LOGGER, Config
|
|
from app.utils.media_helper import get_filename
|
|
|
|
|
|
class Aio:
|
|
def __init__(self):
|
|
self.session: ClientSession | None = None
|
|
self.app = None
|
|
self.site = None
|
|
self.port = os.environ.get("API_PORT", 0)
|
|
self.runner = None
|
|
if self.port:
|
|
Config.INIT_TASKS.append(self.set_site())
|
|
Config.INIT_TASKS.append(self.set_session())
|
|
|
|
async def set_session(self):
|
|
self.session = ClientSession()
|
|
|
|
async def set_site(self):
|
|
LOGGER.info("Starting Static WebSite.")
|
|
self.app = web.Application()
|
|
self.app.router.add_get(path="/", handler=self.handle_request)
|
|
self.runner = web.AppRunner(self.app)
|
|
await self.runner.setup()
|
|
self.site = web.TCPSite(self.runner, "0.0.0.0", self.port)
|
|
await self.site.start()
|
|
|
|
async def handle_request(self, _):
|
|
return web.Response(text="Web Server Running...")
|
|
|
|
async def get_json(
|
|
self,
|
|
url: str,
|
|
headers: dict = None,
|
|
params: dict | str = None,
|
|
json_: bool = False,
|
|
timeout: int = 10,
|
|
) -> dict | None:
|
|
try:
|
|
async with self.session.get(
|
|
url=url, headers=headers, params=params, timeout=timeout
|
|
) as ses:
|
|
if json_:
|
|
return await ses.json()
|
|
else:
|
|
return json.loads(await ses.text())
|
|
except BaseException:
|
|
return
|
|
|
|
async def in_memory_dl(self, url: str) -> BytesIO:
|
|
async with self.session.get(url) as remote_file:
|
|
bytes_data = await remote_file.read()
|
|
file = BytesIO(bytes_data)
|
|
file.name = get_filename(url)
|
|
return file
|
|
|
|
async def thumb_dl(self, thumb) -> BytesIO | str | None:
|
|
if not thumb or not thumb.startswith("http"):
|
|
return thumb
|
|
return await in_memory_dl(thumb) # NOQA
|
|
|
|
|
|
aio = Aio()
|