From 109be8e763f4b80b67ee6f77b44f738b8429d1b9 Mon Sep 17 00:00:00 2001 From: Jarvis Jeason Jacob Date: Sun, 30 Aug 2026 11:57:47 +0530 Subject: [PATCH] Add configuration validation (#10) --- data/env.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ machines/manager.py | 1 + machines/worker.py | 1 + 3 files changed, 50 insertions(+) diff --git a/data/env.py b/data/env.py index fa94091..5bdcab4 100644 --- a/data/env.py +++ b/data/env.py @@ -1,9 +1,24 @@ +import sys from pathlib import Path import dotenv class Env: + REQUIRED_MANAGER_VARS = [ + "MANAGER_TOKEN", + "MANAGER_HOST", + "MANAGER_PORT", + "MANAGER_HOSTNAME", + ] + REQUIRED_WORKER_VARS = [ + "WORKER_ID", + "WORKER_TOKEN", + "WORKER_HOST", + "WORKER_PORT", + "WORKER_HOSTNAME", + ] + def __init__(self): self.path = Path(__file__).resolve().parent / "secrets" / ".env" self.env = dict(dotenv.dotenv_values(self.path)) @@ -52,3 +67,36 @@ def _save(self): "\n".join(lines) + ("\n" if lines else ""), encoding="utf-8", ) + + def _validate(self, required_vars, port_var): + errors = [] + missing = [key for key in required_vars if not self.env.get(key)] + + for key in missing: + errors.append(f"Missing required variable: {key}") + + if port_var not in missing: + port_value = self.env.get(port_var) + try: + port = int(port_value) + if not (1 <= port <= 65535): + raise ValueError + except (TypeError, ValueError): + errors.append( + f"Invalid value for {port_var}: '{port_value}' " + "(must be a valid port number between 1 and 65535)" + ) + + if errors: + details = "\n".join(errors) + print( + f"✗ Invalid ACS configuration.\n\n{details}\n\n" + f"Please check:\n{self.path}" + ) + sys.exit(1) + + def validate_manager(self): + self._validate(self.REQUIRED_MANAGER_VARS, "MANAGER_PORT") + + def validate_worker(self): + self._validate(self.REQUIRED_WORKER_VARS, "WORKER_PORT") \ No newline at end of file diff --git a/machines/manager.py b/machines/manager.py index c09f727..c6124b4 100644 --- a/machines/manager.py +++ b/machines/manager.py @@ -19,6 +19,7 @@ env = Env() db = Database() +env.validate_manager() env.get_all() ManagerJson = env.ManagerJson diff --git a/machines/worker.py b/machines/worker.py index 06f7780..4242507 100644 --- a/machines/worker.py +++ b/machines/worker.py @@ -24,6 +24,7 @@ python = Python() # db = Database() env = Env() +env.validate_worker() BASE_DIR = Path(__file__).resolve().parent.parent