import argparse
import os
import sys
from dotenv import load_dotenv
from loguru import logger
load_dotenv()
def setup_logging(log_file: str | None = None) -> None:
logger.remove()
logger.add(
sys.stderr,
level="INFO",
format="{time:HH:mm:ss} | {level:<8} | {message}",
)
if log_file:
log_dir = os.getenv("LOGDIR")
if log_dir:
logger.add(
os.path.join(log_dir, log_file),
rotation="7 days",
retention="30 days",
level="DEBUG",
format="{time:YYYY-MM-DD HH:mm:ss} | {level:<8} | {message}",
)
def main() -> None:
parser = argparse.ArgumentParser(
prog="priority-tracks",
description="Priority tracks playlist monitoring and TTLO pipelines",
)
parser.add_argument(
"mode",
choices=["priority-tracks", "ttlo", "all"],
help="Pipeline to run: priority-tracks, ttlo, or all (both)",
)
parser.add_argument(
"--log-file", "-l",
default="priority-tracks-cea.log",
)
args = parser.parse_args()
setup_logging(args.log_file)
try:
if args.mode in ("priority-tracks", "all"):
from .services.priority_tracks import run_update as run_pt
run_pt()
if args.mode in ("ttlo", "all"):
from .services.ttlo import run_update as run_ttlo
run_ttlo()
except KeyboardInterrupt:
logger.info("Interrupted by user")
sys.exit(130)
except SystemExit:
raise
except Exception as e:
logger.exception(f"Fatal error: {e}")
sys.exit(1)
if __name__ == "__main__":
main()