Add JellyfinAPI implementation of DirGetter
This commit is contained in:
parent
b00c60f448
commit
ebca2172f4
2
setup.py
2
setup.py
|
@ -8,5 +8,5 @@ setup(
|
||||||
author_email="root@orudo.ru",
|
author_email="root@orudo.ru",
|
||||||
description="A simple Telegram bot that will allow you to upload torrent files / magnet links to a remote Torrent server (qBitTorrent, Transmission, etc.)",
|
description="A simple Telegram bot that will allow you to upload torrent files / magnet links to a remote Torrent server (qBitTorrent, Transmission, etc.)",
|
||||||
install_requires=["aiohttp>=3.10.0", "aiofiles>=24.1.0", "aiofiles>=24.1.0"],
|
install_requires=["aiohttp>=3.10.0", "aiofiles>=24.1.0", "aiofiles>=24.1.0"],
|
||||||
packages=["tubot", "tubot.static", "tubot.torrent"],
|
packages=["tubot", "tubot.static", "tubot.torrent", "tubot.dirgetter"],
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,6 +14,7 @@ class DirGetter(IValidatable, ABC):
|
||||||
"""
|
"""
|
||||||
DirectoryGetter Abstract class
|
DirectoryGetter Abstract class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_gtype: GetterTypes
|
_gtype: GetterTypes
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
|
@ -9,12 +9,14 @@ from tubot.dirgetter.types import GetterTypes
|
||||||
from tubot.dirgetter.abc import DirGetter
|
from tubot.dirgetter.abc import DirGetter
|
||||||
from aiofiles.os import listdir
|
from aiofiles.os import listdir
|
||||||
from aiofiles.ospath import isdir
|
from aiofiles.ospath import isdir
|
||||||
|
from aiohttp import ClientResponse, ClientSession
|
||||||
|
|
||||||
|
|
||||||
class OSGetter(DirGetter):
|
class OSGetter(DirGetter):
|
||||||
"""
|
"""
|
||||||
Python.os module implementation of DirectoryGetter
|
Python.os module implementation of DirectoryGetter
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_gtype = GetterTypes.OS
|
_gtype = GetterTypes.OS
|
||||||
base_dir: str
|
base_dir: str
|
||||||
|
|
||||||
|
@ -38,3 +40,57 @@ class OSGetter(DirGetter):
|
||||||
|
|
||||||
async def __validate__(self) -> bool:
|
async def __validate__(self) -> bool:
|
||||||
return await isdir(self.base_dir)
|
return await isdir(self.base_dir)
|
||||||
|
|
||||||
|
|
||||||
|
class Jellyfin(DirGetter):
|
||||||
|
"""
|
||||||
|
Jellyfin API implementation of DirectoryGetter
|
||||||
|
"""
|
||||||
|
|
||||||
|
_gtype = GetterTypes.Jellyfin
|
||||||
|
host: str
|
||||||
|
token: str
|
||||||
|
|
||||||
|
def __init__(self, host: str, api_token: str) -> None:
|
||||||
|
"""
|
||||||
|
:param host: Adress of Jellyfin server
|
||||||
|
:param api_token: Jellyfin API Token for auth
|
||||||
|
"""
|
||||||
|
super().__init__()
|
||||||
|
self.host = host
|
||||||
|
self.token = api_token
|
||||||
|
|
||||||
|
async def _get(self, api: str) -> ClientResponse:
|
||||||
|
async with ClientSession() as session:
|
||||||
|
resp = await session.get(f"{self.host}/{api}?api_key={self.token}")
|
||||||
|
status = resp.status
|
||||||
|
match status:
|
||||||
|
case 200:
|
||||||
|
return resp
|
||||||
|
case 401:
|
||||||
|
raise ConnectionError("401: Auth error")
|
||||||
|
case 403:
|
||||||
|
raise ConnectionError("403: Forbidden")
|
||||||
|
case 404:
|
||||||
|
raise ConnectionError("403: Not found")
|
||||||
|
raise ConnectionError()
|
||||||
|
|
||||||
|
@property
|
||||||
|
async def idx(self) -> str | None:
|
||||||
|
resp = await self._get("System/Info")
|
||||||
|
json = await resp.json()
|
||||||
|
return json["Id"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
async def folders(self) -> dict:
|
||||||
|
resp = await self._get("Library/VirtualFolders")
|
||||||
|
json = await resp.json()
|
||||||
|
dirs = {}
|
||||||
|
for folder in json:
|
||||||
|
dirs[folder["Name"]] = folder["Locations"][0]
|
||||||
|
return dirs
|
||||||
|
|
||||||
|
async def __validate__(self) -> bool:
|
||||||
|
if await self.idx is not None:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
Reference in New Issue