Skip to content

Configuration

qgendapy._config

QGendaConfig(email, password, company_key, base_url='https://api.qgenda.com/v2') dataclass

email instance-attribute

password instance-attribute

company_key instance-attribute

base_url = 'https://api.qgenda.com/v2' class-attribute instance-attribute

resolve_config(email=None, password=None, company_key=None, base_url=None)

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.

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,
    )