Files
jellyfinStats/jellyfinstats/config.py
2024-05-15 23:15:24 +08:00

78 lines
2.8 KiB
Python

from argparse import Namespace
try:
from functools import cached_property
except ImportError:
cached_property = property
from os.path import join
from yaml import load as loadyaml
try:
from yaml import CSafeLoader as SafeLoader
except ImportError:
from yaml import SafeLoader
from . import _
class Config:
def __init__(self, path: str, args: Namespace = None):
with open(path, encoding="UTF-8") as f:
self._data = loadyaml(f, Loader=SafeLoader)
if self._data is None:
self._data = {}
self._args = args
@cached_property
def ask_page_size(self) -> int:
if self._args and self._args.ask_page_size is not None:
return self._args.ask_page_size
if 'ask_page_size' in self._data and isinstance(self._data['ask_page_size'], int): # noqa: E501
return self._data['ask_page_size']
return 10
@cached_property
def playback_reporting_db(self) -> str:
if self._args and self._args.playback_reporting_db:
return self._args.playback_reporting_db
if 'playback_reporting_db' in self._data and self._data['playback_reporting_db']: # noqa: E501
return self._data['playback_reporting_db']
d = self.jellyfin_data_dir
if d:
return join(d, "playback_reporting.db")
raise ValueError(_('%s not set.') % ('playback_reporting_db'))
@cached_property
def library_db(self) -> str:
if self._args and self._args.library_db:
return self._args.library_db
if 'library_db' in self._data and self._data['library_db']:
return self._data['library_db']
d = self.jellyfin_data_dir
if d:
return join(d, "library.db")
raise ValueError(_('%s not set.') % ('library_db'))
@cached_property
def jellyfin_data_dir(self) -> str | None:
if self._args and self._args.jellyfin_data_dir:
return self._args.jellyfin_data_dir
if 'jellyfin_data_dir' in self._data and self._data['jellyfin_data_dir']: # noqa: E501
return self._data['jellyfin_data_dir']
@cached_property
def jellyfin_db(self) -> str:
if self._args and self._args.jellyfin_db:
return self._args.jellyfin_db
if 'jellyfin_db' in self._data and self._data['jellyfin_db']:
return self._data['jellyfin_db']
d = self.jellyfin_data_dir
if d:
return join(d, "jellyfin.db")
raise ValueError(_('%s not set.') % ('jellyfin_db'))
@cached_property
def output_dir(self) -> str:
if self._args and self._args.output_dir:
return self._args.output_dir
if 'output_dir' in self._data and self._data['output_dir']:
return self._data['output_dir']
return 'output'