diff --git a/scripts/check_file_sizes.py b/scripts/check_file_sizes.py index 7c4d10d..543fb9c 100644 --- a/scripts/check_file_sizes.py +++ b/scripts/check_file_sizes.py @@ -39,7 +39,8 @@ def main() -> int: allowed = allowlist() problems = [] for path in tracked_sources(): - lines = Path(path).read_text(encoding="utf-8", errors="replace").count("\n") + text = Path(path).read_text(encoding="utf-8", errors="replace") + lines = len(text.splitlines()) ceiling = allowed.pop(path, None) if ceiling is None and lines > LIMIT: problems.append(f"{path}: {lines} lines, limit {LIMIT}. Split it by concern.") diff --git a/systemgate/config.py b/systemgate/config.py index 6977142..3936f16 100644 --- a/systemgate/config.py +++ b/systemgate/config.py @@ -22,13 +22,28 @@ def _value(name: str, default: str = "") -> str: return os.environ.get(name, default).strip() +class ConfigError(ValueError): + pass + + +def _port(name: str, default: str) -> int: + raw = _value(name, default) + try: + port = int(raw) + except ValueError: + raise ConfigError(f"invalid {name}: {raw!r} (expected integer 1-65535)") from None + if not 1 <= port <= 65535: + raise ConfigError(f"{name} out of range: {port} (expected 1-65535)") + return port + + def get_settings() -> Settings: root = Path(__file__).resolve().parents[1] data_dir = Path(_value("SYSTEMGATE_DATA_DIR", str(root / "data"))).expanduser().resolve() backup_root = Path(_value("SYSTEMGATE_BACKUP_ROOT", "/backups")).expanduser().resolve() return Settings( host=_value("SYSTEMGATE_HOST", "127.0.0.1"), - port=int(_value("SYSTEMGATE_PORT", "8040")), + port=_port("SYSTEMGATE_PORT", "8040"), data_dir=data_dir, admin_key=_value("SYSTEMGATE_ADMIN_KEY"), backup_root=backup_root,