Moved from .env to ini config format

This commit is contained in:
2022-07-22 14:54:57 +02:00
parent 4bf249a9fd
commit ffa8090399
10 changed files with 90 additions and 63 deletions

View File

@ -1,21 +1,20 @@
import os
from dotenv import load_dotenv
from al_arr_sync.anilist import AniListClient
from al_arr_sync.radarr import RadarrClient
from al_arr_sync.sonarr import SonarrClient
from al_arr_sync.types import DlAutomator
load_dotenv()
from al_arr_sync.config import load_config
def main() -> int:
al = AniListClient()
sonarr: DlAutomator = SonarrClient.from_env()
radarr: DlAutomator = RadarrClient.from_env()
cfg = load_config("config.ini")
username = os.environ["ANILIST_USERNAME"]
al = AniListClient()
sonarr: DlAutomator = SonarrClient.from_config(cfg)
radarr: DlAutomator = RadarrClient.from_config(cfg)
username = cfg["anilist"]["username"]
media = al.currently_watching(username)
for entry in media:

7
al_arr_sync/config.py Normal file
View File

@ -0,0 +1,7 @@
import configparser
def load_config(path: str) -> configparser.ConfigParser:
config = configparser.ConfigParser()
config.read(path)
return config

View File

@ -1,4 +1,5 @@
import os
import configparser
import typing
from urllib.parse import urljoin
@ -9,16 +10,32 @@ from al_arr_sync.types import AnyDict
class RadarrClient:
def __init__(self, radarr_url: str, api_key: str) -> None:
self.radarr_url = radarr_url
def __init__(
self, api_url: str, api_key: str, folder_path: str, quality_profile: int = 4
) -> None:
self.api_url = api_url
self.api_key = api_key
self.folder_path = folder_path
self.quality_profile = quality_profile
self.http_session = Session()
@staticmethod
def from_env() -> "RadarrClient":
return RadarrClient(
radarr_url=os.environ["RADARR_API_URL"],
api_key=os.environ["RADARR_API_KEY"],
api_url=os.environ["SONARR_API_URL"],
api_key=os.environ["SONARR_API_KEY"],
folder_path=os.environ["SONARR_FOLDER_PATH"],
quality_profile=int(os.environ["SONARR_QUALITY_PROFILE"]),
)
@staticmethod
def from_config(cfg: configparser.ConfigParser) -> "RadarrClient":
return RadarrClient(
api_url=cfg["radarr"]["api_url"],
api_key=cfg["radarr"]["api_key"],
folder_path=cfg["radarr"]["folder_path"],
quality_profile=int(cfg["radarr"]["quality_profile"]),
)
def _prepare_request(
@ -28,7 +45,7 @@ class RadarrClient:
params: AnyDict = {},
json: typing.Optional[AnyDict] = None,
) -> PreparedRequest:
url = urljoin(self.radarr_url, endpoint)
url = urljoin(self.api_url, endpoint)
headers = {"X-Api-Key": self.api_key}
req = PreparedRequest()
@ -50,8 +67,8 @@ class RadarrClient:
"ignoreEpisodesWithFiles": False,
"ignoreEpisodesWithoutFiles": False,
},
"rootFolderPath": os.environ["RADARR_FOLDER_PATH"],
"qualityProfileId": int(os.environ["RADARR_QUALITY_PROFILE"]),
"rootFolderPath": self.folder_path,
"qualityProfileId": self.quality_profile,
}
)
req = self._prepare_request("/api/v3/movie", method="POST", json=payload)

View File

@ -1,3 +1,4 @@
import configparser
import os
import typing
from urllib.parse import urljoin
@ -9,16 +10,40 @@ from al_arr_sync.types import AnyDict
class SonarrClient:
def __init__(self, sonarr_url: str, api_key: str) -> None:
self.sonarr_url = sonarr_url
def __init__(
self,
api_url: str,
api_key: str,
folder_path: str,
quality_profile: int = 4,
language_profile: int = 1,
) -> None:
self.api_url = api_url
self.api_key = api_key
self.folder_path = folder_path
self.quality_profile = quality_profile
self.language_profile = language_profile
self.http_session = Session()
@staticmethod
def from_env() -> "SonarrClient":
return SonarrClient(
sonarr_url=os.environ["SONARR_API_URL"],
api_url=os.environ["SONARR_API_URL"],
api_key=os.environ["SONARR_API_KEY"],
folder_path=os.environ["SONARR_FOLDER_PATH"],
quality_profile=int(os.environ["SONARR_QUALITY_PROFILE"]),
language_profile=int(os.environ["SONARR_LANGUAGE_PROFILE"]),
)
@staticmethod
def from_config(cfg: configparser.ConfigParser) -> "SonarrClient":
return SonarrClient(
api_url=cfg["sonarr"]["api_url"],
api_key=cfg["sonarr"]["api_key"],
folder_path=cfg["sonarr"]["folder_path"],
quality_profile=int(cfg["sonarr"]["quality_profile"]),
language_profile=int(cfg["sonarr"]["language_profile"]),
)
def _prepare_request(
@ -28,7 +53,7 @@ class SonarrClient:
params: AnyDict = {},
json: typing.Optional[AnyDict] = None,
) -> PreparedRequest:
url = urljoin(self.sonarr_url, endpoint)
url = urljoin(self.api_url, endpoint)
headers = {"X-Api-Key": self.api_key}
req = PreparedRequest()
@ -50,9 +75,9 @@ class SonarrClient:
"searchForCutoffUnmetEpisodes": False,
"searchForMissingEpisodes": False,
},
"rootFolderPath": os.environ["SONARR_FOLDER_PATH"],
"qualityProfileId": int(os.environ["SONARR_QUALITY_PROFILE"]),
"languageProfileId": int(os.environ["SONARR_LANGUAGE_PROFILE"]),
"rootFolderPath": self.folder_path,
"qualityProfileId": self.quality_profile,
"languageProfileId": self.language_profile,
}
)
req = self._prepare_request("/api/v3/series", method="POST", json=payload)