Source code for sw_metadata_bot.token_resolver
"""Token resolution helpers for API clients."""
import os
from pathlib import Path
from dotenv import dotenv_values
[docs]
def resolve_token(
*,
explicit_token: str | None,
env_var_name: str,
dry_run: bool,
) -> str | None:
"""Resolve token with precedence: explicit > env > .env fallback."""
if explicit_token:
return explicit_token
env_token = os.getenv(env_var_name)
if env_token:
return env_token
env_path = Path.cwd() / ".env"
if env_path.exists():
env_values = dotenv_values(env_path)
env_file_token = env_values.get(env_var_name)
if isinstance(env_file_token, str) and env_file_token:
return env_file_token
if not dry_run:
raise ValueError(f"{env_var_name} required (set in .env or environment)")
return None