Skip to content

Commit e97bbcd

Browse files
Remove Constants file
Validate settings tokens
1 parent 043ce2e commit e97bbcd

6 files changed

Lines changed: 45 additions & 91 deletions

File tree

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
3-
rev: v0.8.3
3+
rev: v0.9.3
44
hooks:
55
- id: ruff-format
66
- id: ruff
77
- repo: https://github.com/executablebooks/mdformat
8-
rev: 0.7.19
8+
rev: 0.7.21
99
hooks:
1010
- id: mdformat
1111
additional_dependencies:

mediux_posters/__main__.py

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
from typing import Annotated
66
from uuid import uuid4
77

8+
from plexapi.exceptions import Unauthorized
89
from typer import Abort, Option, Typer
910

1011
from mediux_posters import __version__, get_cache_root, setup_logging
1112
from mediux_posters.cli import settings_app
1213
from mediux_posters.console import CONSOLE
13-
from mediux_posters.constants import Constants
1414
from mediux_posters.mediux import Mediux
15-
from mediux_posters.services import BaseService
15+
from mediux_posters.services import BaseService, Jellyfin, Plex
1616
from mediux_posters.services._base import BaseCollection, BaseMovie, BaseSeries
17+
from mediux_posters.settings import Settings
1718
from mediux_posters.utils import MediaType, delete_folder
1819

1920
app = Typer()
@@ -85,9 +86,19 @@ def sync_posters(
8586
if clean_cache:
8687
LOGGER.info("Cleaning Cache")
8788
delete_folder(folder=get_cache_root())
88-
mediux = Constants.mediux()
89+
settings = Settings.load()
90+
settings.save()
91+
mediux = Mediux()
92+
service_list = []
93+
if settings.jellyfin.token:
94+
service_list.append(Jellyfin(settings=settings.jellyfin))
95+
try:
96+
if settings.plex.token:
97+
service_list.append(Plex(settings=settings.plex))
98+
except Unauthorized as err:
99+
LOGGER.warning(err)
89100

90-
for service in Constants.service_list():
101+
for service in service_list:
91102
for mediatype, func in {
92103
MediaType.SERIES: service.list_series,
93104
MediaType.COLLECTION: service.list_collections,
@@ -104,7 +115,7 @@ def sync_posters(
104115
set_list = mediux.list_sets(mediatype=entry.mediatype, tmdb_id=entry.tmdb_id)
105116
if not set_list:
106117
continue
107-
for username in Constants.settings().priority_usernames:
118+
for username in settings.priority_usernames:
108119
for set_data in [
109120
x for x in set_list if x.get("user_created", {}).get("username") == username
110121
]:
@@ -123,18 +134,12 @@ def sync_posters(
123134
)
124135
if entry.all_posters_uploaded:
125136
break
126-
if (
127-
not Constants.settings().only_priority_usernames
128-
and not entry.all_posters_uploaded
129-
):
137+
if not settings.only_priority_usernames and not entry.all_posters_uploaded:
130138
for set_data in set_list:
131139
username = set_data.get("user_created", {}).get("username")
132-
if username in Constants.settings().exclude_usernames:
140+
if username in settings.exclude_usernames:
133141
continue
134-
if (
135-
Constants.settings().priority_usernames
136-
and username in Constants.settings().priority_usernames
137-
):
142+
if settings.priority_usernames and username in settings.priority_usernames:
138143
continue
139144
LOGGER.info("Downloading '%s' by '%s'", set_data.get("set_name"), username)
140145
set_data = mediux.scrape_set(set_id=set_data.get("id"))
@@ -196,7 +201,17 @@ def set_posters(
196201
if clean_cache:
197202
LOGGER.info("Cleaning Cache")
198203
delete_folder(folder=get_cache_root())
199-
mediux = Constants.mediux()
204+
settings = Settings.load()
205+
settings.save()
206+
mediux = Mediux()
207+
service_list = []
208+
if settings.jellyfin.token:
209+
service_list.append(Jellyfin(settings=settings.jellyfin))
210+
try:
211+
if settings.plex.token:
212+
service_list.append(Plex(settings=settings.plex))
213+
except Unauthorized as err:
214+
LOGGER.warning(err)
200215

201216
url_list = [x.strip() for x in file.read_text().splitlines()] if file else urls
202217
for entry in url_list:
@@ -216,7 +231,7 @@ def set_posters(
216231
)
217232
if tmdb_id:
218233
tmdb_id = int(tmdb_id)
219-
for service in Constants.service_list():
234+
for service in service_list:
220235
with CONSOLE.status(
221236
f"Searching {type(service).__name__} for '{set_data.get('set_name')} [{tmdb_id}]'"
222237
):

mediux_posters/cli/settings.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
from typer import Typer
44

55
from mediux_posters.console import CONSOLE
6-
from mediux_posters.constants import Constants
76
from mediux_posters.settings import Settings
87

98
app = Typer(help="Commands for viewing app settings.")
109

1110

1211
@app.command(name="view", help="Display the current and default settings.")
1312
def view() -> None:
14-
settings = Constants.settings()
15-
settings.display()
13+
Settings.load().display()
1614

1715

1816
@app.command(name="locate", help="Display the path to the settings file.")

mediux_posters/constants.py

Lines changed: 0 additions & 64 deletions
This file was deleted.

mediux_posters/settings.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
__all__ = ["Jellyfin", "Plex", "Settings"]
22

33
from pathlib import Path
4-
from typing import Any, ClassVar
4+
from typing import Annotated, Any, ClassVar
55

66
import tomli_w as tomlwriter
7-
from pydantic import Field
7+
from pydantic import BeforeValidator, Field
88
from rich.panel import Panel
99

1010
from mediux_posters import get_config_root
1111
from mediux_posters.console import CONSOLE
12-
from mediux_posters.utils import BaseModel, flatten_dict
12+
from mediux_posters.utils import BaseModel, blank_is_none, flatten_dict
1313

1414
try:
1515
from typing import Self # Python >= 3.11
@@ -24,12 +24,12 @@
2424

2525
class Jellyfin(BaseModel):
2626
base_url: str = "http://127.0.0.1:8096"
27-
token: str | None = None
27+
token: Annotated[str | None, BeforeValidator(blank_is_none)] = None
2828

2929

3030
class Plex(BaseModel):
3131
base_url: str = "http://127.0.0.1:32400"
32-
token: str | None = None
32+
token: Annotated[str | None, BeforeValidator(blank_is_none)] = None
3333

3434

3535
def _stringify_values(content: dict[str, Any]) -> dict[str, Any]:

mediux_posters/utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__all__ = ["BaseModel", "MediaType", "delete_folder", "flatten_dict", "slugify"]
1+
__all__ = ["BaseModel", "MediaType", "blank_is_none", "delete_folder", "flatten_dict", "slugify"]
22

33
import logging
44
import re
@@ -68,3 +68,8 @@ def flatten_dict(content: dict[str, Any], parent_key: str = "") -> dict[str, Any
6868
else:
6969
items[new_key] = value
7070
return dict(sorted(items.items()))
71+
72+
73+
def blank_is_none(value: str) -> str | None:
74+
"""Enforces blank strings to be None."""
75+
return value if value else None

0 commit comments

Comments
 (0)