Resolve configuration from args > env vars > INI file > defaults.
Priority
- Explicit keyword arguments
- Environment variables: QGENDA_EMAIL, QGENDA_PASSWORD,
QGENDA_COMPANY_KEY, QGENDA_BASE_URL
- INI file pointed to by QGENDA_CONF_FILE (section from
QGENDA_CONF_REGION, default "qgenda")
- Default base_url only
Raises ConfigurationError if email, password, or company_key cannot be resolved.
Source code in src/qgendapy/_config.py
| def resolve_config(
email: str | None = None,
password: str | None = None,
company_key: str | None = None,
base_url: str | None = None,
) -> QGendaConfig:
"""Resolve configuration from args > env vars > INI file > defaults.
Priority:
1. Explicit keyword arguments
2. Environment variables: QGENDA_EMAIL, QGENDA_PASSWORD,
QGENDA_COMPANY_KEY, QGENDA_BASE_URL
3. INI file pointed to by QGENDA_CONF_FILE (section from
QGENDA_CONF_REGION, default "qgenda")
4. Default base_url only
Raises ConfigurationError if email, password, or company_key cannot be resolved.
"""
ini = _load_ini()
resolved_email = email or os.environ.get("QGENDA_EMAIL") or ini.get("email")
resolved_password = password or os.environ.get("QGENDA_PASSWORD") or ini.get("password")
resolved_company_key = (
company_key or os.environ.get("QGENDA_COMPANY_KEY") or ini.get("company_key")
)
resolved_base_url = (
base_url
or os.environ.get("QGENDA_BASE_URL")
or ini.get("base_url")
or "https://api.qgenda.com/v2"
)
missing: list[str] = []
if not resolved_email:
missing.append("email")
if not resolved_password:
missing.append("password")
if not resolved_company_key:
missing.append("company_key")
if missing:
raise ConfigurationError(
f"Missing required configuration: {', '.join(missing)}. "
"Provide via arguments, environment variables (QGENDA_EMAIL, etc.), "
"or an INI file (QGENDA_CONF_FILE)."
)
# After the missing check above, these are guaranteed to be str
assert resolved_email is not None
assert resolved_password is not None
assert resolved_company_key is not None
return QGendaConfig(
email=resolved_email,
password=resolved_password,
company_key=resolved_company_key,
base_url=resolved_base_url,
)
|