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()