From fde0c8cf738b8b585e1a46b8bb058420d821a74d Mon Sep 17 00:00:00 2001 From: feng83232 Date: Sat, 20 Jun 2026 13:20:48 +0800 Subject: [PATCH] feat: add complete type hints to config_generator.py (closes #23) --- tools/config_generator.py | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/tools/config_generator.py b/tools/config_generator.py index cf20d916..d313c4a0 100644 --- a/tools/config_generator.py +++ b/tools/config_generator.py @@ -172,8 +172,8 @@ ] -def merge_config(base: Dict, override: Dict) -> Dict: - result = dict(base) +def merge_config(base: Dict[str, Any], override: Dict[str, Any]) -> Dict[str, Any]: + result: Dict[str, Any] = dict(base) for key, value in override.items(): if key in result and isinstance(result[key], dict) and isinstance(value, dict): result[key] = merge_config(result[key], value) @@ -182,8 +182,8 @@ def merge_config(base: Dict, override: Dict) -> Dict: return result -def generate_config(env: str, overrides: Optional[Dict] = None) -> Dict: - config = dict(DEFAULT_CONFIG) +def generate_config(env: str, overrides: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + config: Dict[str, Any] = dict(DEFAULT_CONFIG) if env in ENV_OVERRIDES: config = merge_config(config, ENV_OVERRIDES[env]) if overrides: @@ -191,8 +191,8 @@ def generate_config(env: str, overrides: Optional[Dict] = None) -> Dict: return config -def mask_sensitive(config: Dict, prefix: str = "") -> Dict: - masked = {} +def mask_sensitive(config: Dict[str, Any], prefix: str = "") -> Dict[str, Any]: + masked: Dict[str, Any] = {} for key, value in config.items(): full_key = f"{prefix}.{key}" if prefix else key if full_key in SENSITIVE_KEYS: @@ -204,19 +204,19 @@ def mask_sensitive(config: Dict, prefix: str = "") -> Dict: return masked -def to_yaml(config: Dict) -> str: +def to_yaml(config: Dict[str, Any]) -> str: if not HAS_YAML: return "ERROR: PyYAML is not installed" return yaml.dump(config, default_flow_style=False, sort_keys=False) -def to_json(config: Dict, pretty: bool = True) -> str: +def to_json(config: Dict[str, Any], pretty: bool = True) -> str: if pretty: return json.dumps(config, indent=2, default=str) return json.dumps(config, default=str) -def to_toml(config: Dict) -> str: +def to_toml(config: Dict[str, Any]) -> str: if not HAS_TOML: return "ERROR: toml is not installed" @@ -251,8 +251,8 @@ def flatten(config: Dict, prefix: str = "") -> Dict: return "\n".join(lines) -def to_dotenv(config: Dict, prefix: str = "") -> str: - lines = [f"# Generated by config_generator.py", f"# Environment configuration", f"# Generated: {datetime.now().isoformat()}", ""] +def to_dotenv(config: Dict[str, Any], prefix: str = "") -> str: + lines: List[str] = [f"# Generated by config_generator.py", f"# Environment configuration", f"# Generated: {datetime.now().isoformat()}", ""] def flatten(config: Dict, current_prefix: str = ""): for key, value in config.items(): @@ -272,8 +272,8 @@ def flatten(config: Dict, current_prefix: str = ""): return "\n".join(lines) -def to_k8s_configmap(config: Dict, name: str = "app-config") -> str: - data_lines = [] +def to_k8s_configmap(config: Dict[str, Any], name: str = "app-config") -> str: + data_lines: List[str] = [] for key, value in flatten_for_k8s(config): if isinstance(value, str) and not key.startswith("_"): data_lines.append(f" {key}: {json.dumps(value)}") @@ -289,8 +289,8 @@ def to_k8s_configmap(config: Dict, name: str = "app-config") -> str: """ -def flatten_for_k8s(config: Dict, prefix: str = "") -> List[tuple]: - result = [] +def flatten_for_k8s(config: Dict[str, Any], prefix: str = "") -> List[tuple[Any, Any]]: + result: List[tuple[Any, Any]] = [] for key, value in config.items(): full_key = f"{prefix}.{key}" if prefix else key if isinstance(value, dict): @@ -300,8 +300,8 @@ def flatten_for_k8s(config: Dict, prefix: str = "") -> List[tuple]: return result -def parse_args(): - parser = argparse.ArgumentParser(description="Configuration generator") +def parse_args() -> argparse.Namespace: + parser: argparse.ArgumentParser = argparse.ArgumentParser(description="Configuration generator") parser.add_argument("--env", "-e", default="development", choices=list(ENV_OVERRIDES.keys()), help="Target environment") @@ -316,9 +316,9 @@ def parse_args(): return parser.parse_args() -def main(): - args = parse_args() - config = generate_config(args.env) +def main() -> int: + args: argparse.Namespace = parse_args() + config: Dict[str, Any] = generate_config(args.env) if not args.show_sensitive: display_config = mask_sensitive(config)