Source code for qci_client.utilities
- """Package-wide utilities."""
- from datetime import datetime, timezone
- import os
- import requests
- [docs]
- def env_bool(*, name: str, default: bool) -> bool:
- """
- Read a boolean from an environment variable, falling back to default if unset.
- Values are parsed case-insensitively; "1", "true", "t", "yes", "y", and "on" are
- True, while "0", "false", "f", "no", "n", and "off" are False. Any other value
- (including an empty string) falls back to default.
- :param name: name of environment variable to read
- :param default: value to return if variable is unset or unparseable
- """
- value = os.getenv(name)
- if value is None:
- return default
- normalized = value.strip().lower()
- if normalized in {"1", "true", "t", "yes", "y", "on"}:
- return True
- if normalized in {"0", "false", "f", "no", "n", "off"}:
- return False
- return default
- [docs]
- def raise_for_status(*, response: requests.Response) -> None:
- """
- Wrap requests method of same name to include response text in exception message.
- :param response: a response from any API call using the requests package
- """
- try:
-
- response.raise_for_status()
- except requests.HTTPError as err:
-
- raise requests.HTTPError(
- str(err) + f" with response body: {response.text}"
- ) from err
- [docs]
- def log_to_console(*, log: str, verbose: bool = True) -> None:
- """If verbose is true, then print log with timestamp prefix."""
- if verbose:
- print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - {log}")
- [docs]
- def now_utc_ms() -> str:
- """Get current time in UTC with microsecond (i.e., maximum) precision."""
- return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ")