diff --git a/src/agent_config.py b/src/agent_config.py new file mode 100644 index 0000000..2b5a039 --- /dev/null +++ b/src/agent_config.py @@ -0,0 +1,128 @@ +#!/usr/bin/python3 + +from pathlib import Path +import argparse +import sys +import yaml + +class AgentConfig: + Name: str + Backend: str + + # Name of intermediary file with audio recorded from the GSM phone + RecordFile = Path('/dev/shm/qualtest_recorded.wav') + + # Prepared reference audio to play + PreparedReferenceAudio = Path('/dev/shm/reference_ready.wav') + + # Reference audio to play + ReferenceAudio = Path('/dev/shm/reference_original.wav') + + # Loaded reference audio (from backend) + LoadedAudio = Path('/dev/shm/loaded_audio.wav') + + # Script to exec after mobile call answering + ExecScript : Path = None + + # Backup directory (to run without internet) + CacheDir : Path = None + + # PID file name + QualtestPID = Path('/dev/shm/qualtest.pid') + + # Check (or not) PID file presence on the start + CheckPIDFile: bool = False + + # Should the first task run immediately ? + ForceRun = False + + # Use silence eraser or not (speech detector is used in this case) + UseSilenceEraser = True + + # Path to log file + LogPath : Path = None + + # Phone's BT MAC address + BT_MAC : str = None + + # Verbose logging or not + Verbose: bool = False + + # Task limit per single run + TaskLimit: int = 10000000 + + # Task name (used for answering only) + TaskName: str = None + + def parser(self) -> argparse.ArgumentParser: + parser = argparse.ArgumentParser() + parser.add_argument("--config", help="Path to config file, see config.in.yaml.") + parser.add_argument("--check-pid-file", action="store_true", help="Check if .pid file exists and exit if yes. Useful for using with .service files") + parser.add_argument("--test", action="store_true", help="Run the first task immediately. Useful for testing.") + + return parser + + + def __init__(self) -> None: + p = self.parser() + + # Parse arguments + args = p.parse_args() + + if args.test: + self.ForceRun = True + + if args.check_pid_file: + self.CheckPIDFile = True + + if args.config: + config_path = args.config + + with open(config_path, 'r') as stream: + config = yaml.safe_load(stream) + + if config['force_task']: + self.ForceRun = True + + if 'speech_detector' in config: + if config['speech_detector']: + self.UseSilenceEraser = False + + if 'bluetooth_mac' in config['audio']: + self.BT_MAC = config['audio']['bluetooth_mac'] + + + # Logging settings + if 'log' in config: + if 'verbose' in config['log']: + self.Verbose = config['log']['verbose'] + + if 'path' in config['log']: + path = config['log']['path'] + if len(path) > 0: + path = Path(path) + if not path.is_absolute(): + path = Path(__file__).parent.parent / path + + self.LogPath = path + + + # Audio directories + if 'cache_dir' in config: + self.CacheDir = Path(config['cache_dir']) + if not self.CacheDir.is_absolute(): + self.CacheDir = Path(__file__).parent.parent / config['cache_dir'] + + if 'task_limit' in config: + self.TaskLimit = int(config['task_limit']) + + if 'name' in config: + self.Name = config['name'] + + if 'backend' in config: + self.Backend = config['backend'] + + if 'task' in config: + self.TaskName = config['task'] + + \ No newline at end of file