fix: replaced os with pydantic for env getters

This commit is contained in:
Spoked
2024-06-28 20:06:28 -05:00
parent 944a9f44da
commit d5b76327db
5 changed files with 22 additions and 18 deletions
+3 -3
View File
@@ -1,9 +1,9 @@
import os
from fastapi import APIRouter, Request
from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates
from comet.utils.models import settings
templates = Jinja2Templates("comet/templates")
main = APIRouter()
@@ -21,7 +21,7 @@ async def health():
@main.get("/configure")
@main.get("/{b64config}/configure")
async def configure(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "CUSTOM_HEADER_HTML": os.getenv("CUSTOM_HEADER_HTML", "")})
return templates.TemplateResponse("index.html", {"request": request, "CUSTOM_HEADER_HTML": settings.CUSTOM_HEADER_HTML})
@main.get("/manifest.json")
+3 -3
View File
@@ -14,7 +14,7 @@ from comet.utils.general import (bytesToSize, configChecking,
generateDownloadLink, getIndexerManager,
getTorrentHash, isVideo, translate)
from comet.utils.logger import logger
from comet.utils.models import database, rtn
from comet.utils.models import database, rtn, settings
streams = APIRouter()
@@ -70,7 +70,7 @@ async def stream(request: Request, b64config: str, type: str, id: str):
logger.info(f"Cache found for {name}")
timestamp = await database.fetch_one(f"SELECT timestamp FROM cache WHERE cacheKey = '{cacheKey}'")
if timestamp[0] + int(os.getenv("CACHE_TTL", 86400)) < time.time():
if timestamp[0] + settings.CACHE_TTL < time.time():
await database.execute(f"DELETE FROM cache WHERE cacheKey = '{cacheKey}'")
logger.info(f"Cache expired for {name}")
@@ -90,7 +90,7 @@ async def stream(request: Request, b64config: str, type: str, id: str):
else:
logger.info(f"No cache found for {name} with user configuration")
indexerManagerType = os.getenv("INDEXER_MANAGER_TYPE", "jackett")
indexerManagerType = settings.INDEXER_MANAGER_TYPE
logger.info(f"Start of {indexerManagerType} search for {name} with indexers {config['indexers']}")
+1 -1
View File
@@ -36,7 +36,7 @@ def write_config():
if isinstance(indexers, str):
indexers = indexers.split(",")
elif not isinstance(indexers, list):
logger.warning("Invalid indexers")
logger.error(f"Invalid indexers: {indexers}")
config_data = {
"indexers": indexers,
+14 -10
View File
@@ -10,6 +10,7 @@ import bencodepy
from RTN.patterns import language_code_mapping
from comet.utils.logger import logger
from comet.utils.models import settings
translationTable = {
'ā': 'a', 'ă': 'a', 'ą': 'a', 'ć': 'c', 'č': 'c', 'ç': 'c',
@@ -75,19 +76,19 @@ def configChecking(b64config: str):
async def getIndexerManager(session: aiohttp.ClientSession, indexerManagerType: str, indexers: list, query: str):
try:
timeout = aiohttp.ClientTimeout(total=int(os.getenv("INDEXER_MANAGER_TIMEOUT", 30)))
timeout = aiohttp.ClientTimeout(total=settings.INDEXER_MANAGER_TIMEOUT)
results = []
if indexerManagerType == "jackett":
response = await session.get(f"{os.getenv('INDEXER_MANAGER_URL', 'http://127.0.0.1:9117')}/api/v2.0/indexers/all/results?apikey={os.getenv('INDEXER_MANAGER_API_KEY')}&Query={query}&Tracker[]={'&Tracker[]='.join(indexer for indexer in indexers)}", timeout=timeout)
response = await session.get(f"{settings.INDEXER_MANAGER_URL}/api/v2.0/indexers/all/results?apikey={settings.INDEXER_MANAGER_API_KEY}&Query={query}&Tracker[]={'&Tracker[]='.join(indexer for indexer in indexers)}", timeout=timeout)
response = await response.json()
for result in response["Results"]:
results.append(result)
if indexerManagerType == "prowlarr":
getIndexers = await session.get(f"{os.getenv('INDEXER_MANAGER_URL', 'http://127.0.0.1:9696')}/api/v1/indexer", headers={
"X-Api-Key": os.getenv("INDEXER_MANAGER_API_KEY")
getIndexers = await session.get(f"{settings.INDEXER_MANAGER_URL}/api/v1/indexer", headers={
"X-Api-Key": settings.INDEXER_MANAGER_API_KEY
})
getIndexers = await getIndexers.json()
@@ -96,8 +97,8 @@ async def getIndexerManager(session: aiohttp.ClientSession, indexerManagerType:
if indexer["definitionName"] in indexers:
indexersId.append(indexer["id"])
response = await session.get(f"{os.getenv('INDEXER_MANAGER_URL', 'http://127.0.0.1:9696')}/api/v1/search?query={query}&indexerIds={'&indexerIds='.join(str(indexerId) for indexerId in indexersId)}&type=search", headers={
"X-Api-Key": os.getenv("INDEXER_MANAGER_API_KEY")
response = await session.get(f"{settings.INDEXER_MANAGER_URL}/api/v1/search?query={query}&indexerIds={'&indexerIds='.join(str(indexerId) for indexerId in indexersId)}&type=search", headers={
"X-Api-Key": settings.INDEXER_MANAGER_API_KEY
})
response = await response.json()
@@ -119,7 +120,7 @@ async def getTorrentHash(session: aiohttp.ClientSession, indexerManagerType: str
url = torrent["Link"] if indexerManagerType == "jackett" else torrent["downloadUrl"]
try:
timeout = aiohttp.ClientTimeout(total=int(os.getenv("GET_TORRENT_TIMEOUT", 5)))
timeout = aiohttp.ClientTimeout(total=settings.GET_TORRENT_TIMEOUT)
response = await session.get(url, allow_redirects=False, timeout=timeout)
if response.status == 200:
torrentData = await response.read()
@@ -151,9 +152,12 @@ async def generateDownloadLink(debridApiKey: str, hash: str, index: str):
proxy = None
if "Your ISP or VPN provider IP address is currently blocked on our website" in checkBlacklisted:
proxy = os.getenv("DEBRID_PROXY_URL", "http://127.0.0.1:1080")
logger.warning(f"Real-Debrid blacklisted server's IP. Switching to proxy {proxy} for {hash}|{index}")
proxy = settings.DEBRID_PROXY_URL
if not proxy:
logger.warning(f"Real-Debrid blacklisted server's IP. No proxy found.")
return "https://comet.fast" # TODO: This needs to be handled better
else:
logger.warning(f"Real-Debrid blacklisted server's IP. Switching to proxy {proxy} for {hash}|{index}")
addMagnet = await session.post(f"https://api.real-debrid.com/rest/1.0/torrents/addMagnet", headers={
"Authorization": f"Bearer {debridApiKey}"
+1 -1
View File
@@ -15,7 +15,7 @@ class AppSettings(BaseSettings):
FASTAPI_HOST: str = "0.0.0.0"
FASTAPI_PORT: int = 8000
FASTAPI_WORKERS: int = 2 * (os.cpu_count() or 1)
DATABASE_PATH: str = "database.db"
DATABASE_PATH: str = "data/comet.db"
CACHE_TTL: int = 86400
GET_TORRENT_TIMEOUT: int = 5
INDEXER_MANAGER_INDEXERS: List[str] = ["jackett", "qbittorrent"]