95 lines
3.7 KiB
Python
95 lines
3.7 KiB
Python
import sys
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
import logging
|
|
import tomllib
|
|
|
|
from from_root import from_root
|
|
|
|
from src.ez_lan_manager.types.ConfigurationTypes import DatabaseConfiguration, MailingServiceConfiguration, LanInfo, TicketInfo, SeatingConfiguration
|
|
|
|
logger = logging.getLogger(__name__.split(".")[-1])
|
|
|
|
class ConfigurationService:
|
|
def __init__(self, config_file_path: Path) -> None:
|
|
try:
|
|
with open(from_root("VERSION"), "r") as version_file:
|
|
self._version = version_file.read().strip()
|
|
except FileNotFoundError:
|
|
logger.warning("Could not find VERSION file, defaulting to '0.0.0'")
|
|
self._version = "0.0.0"
|
|
|
|
try:
|
|
with open(config_file_path, "rb") as config_file:
|
|
self._config = tomllib.load(config_file)
|
|
except FileNotFoundError:
|
|
logger.fatal(f"Could not find config file at \"{config_file_path}\", exiting...")
|
|
exit(1)
|
|
|
|
def get_database_configuration(self) -> DatabaseConfiguration:
|
|
try:
|
|
database_configuration = self._config["database"]
|
|
return DatabaseConfiguration(
|
|
db_user=database_configuration["db_user"],
|
|
db_password=database_configuration["db_password"],
|
|
db_host=database_configuration["db_host"],
|
|
db_port=database_configuration["db_port"],
|
|
db_name=database_configuration["db_name"]
|
|
)
|
|
except KeyError:
|
|
logger.fatal("Error loading DatabaseConfiguration, exiting...")
|
|
sys.exit(1)
|
|
|
|
|
|
def get_mailing_service_configuration(self) -> MailingServiceConfiguration:
|
|
try:
|
|
mailing_configuration = self._config["mailing"]
|
|
return MailingServiceConfiguration(
|
|
smtp_server=mailing_configuration["smtp_server"],
|
|
smtp_port=mailing_configuration["smtp_port"],
|
|
sender=mailing_configuration["sender"],
|
|
username=mailing_configuration["username"],
|
|
password=mailing_configuration["password"]
|
|
)
|
|
except KeyError:
|
|
logger.fatal("Error loading MailingServiceConfiguration, exiting...")
|
|
sys.exit(1)
|
|
|
|
def get_lan_info(self) -> LanInfo:
|
|
try:
|
|
lan_info = self._config["lan"]
|
|
ticket_info = TicketInfo(
|
|
default_category=lan_info["default_category"],
|
|
categories=list(lan_info["tickets"].keys()),
|
|
_prices=lan_info["prices"],
|
|
_available_tickets=lan_info["tickets"]
|
|
)
|
|
return LanInfo(
|
|
name=lan_info["name"],
|
|
iteration=lan_info["iteration"],
|
|
ticket_info=ticket_info,
|
|
date_from=datetime.strptime(lan_info["date_from"], "%Y-%m-%d %H:%M:%S"),
|
|
date_till=datetime.strptime(lan_info["date_till"], "%Y-%m-%d %H:%M:%S")
|
|
)
|
|
except KeyError:
|
|
logger.fatal("Error loading LAN Info, exiting...")
|
|
sys.exit(1)
|
|
|
|
def get_seating_configuration(self) -> SeatingConfiguration:
|
|
try:
|
|
seating_config = self._config["seating"]
|
|
base_svg_file_path = from_root(seating_config["base_svg_path"])
|
|
if not base_svg_file_path.exists():
|
|
logger.fatal(f"Specified seating plan SVG file was not found at {base_svg_file_path}! Exiting...")
|
|
sys.exit(1)
|
|
return SeatingConfiguration(
|
|
base_svg_path=base_svg_file_path
|
|
)
|
|
except KeyError:
|
|
logger.fatal("Error loading seating configuration, exiting...")
|
|
sys.exit(1)
|
|
|
|
@property
|
|
def APP_VERSION(self) -> str:
|
|
return self._version
|