pybragerone.models.token¶
Token storage implementations for pybragerone.
This module provides token management and persistence strategies for the pybragerone library. It includes:
Token: A Pydantic model representing OAuth2-style authentication tokens
TokenStore: A protocol defining the interface for token persistence
CLITokenStore: A concrete implementation for CLI applications using keyring/file storage
HATokenStore: An adapter for Home Assistant integration storage
The token storage implementations handle secure persistence of authentication tokens, including access tokens, refresh tokens, and expiration information.
- Classes:
Token: Pydantic model representing an authentication token with expiration tracking. TokenStore: Protocol defining the interface for token storage implementations. CLITokenStore: Token storage for CLI applications with keyring and file fallback. HATokenStore: Adapter for Home Assistant storage with callable-based implementation.
Examples
- Using CLITokenStore for CLI applications:
>>> store = CLITokenStore(email="user@example.com") >>> token = store.load() >>> if token and not token.is_expired(): ... print("Token is valid")
- Using HATokenStore with custom storage callbacks:
>>> def my_loader() -> Token | None: ... # Load from HA storage ... pass >>> def my_saver(token: Token) -> None: ... # Save to HA storage ... pass >>> def my_clearer() -> None: ... # Clear from HA storage ... pass >>> store = HATokenStore(loader=my_loader, saver=my_saver, clearer=my_clearer)
Notes
CLITokenStore prefers system keyring when available, falling back to file storage
File storage uses 0600 permissions for security
All token storage operations suppress exceptions to prevent disruption
Token expiration includes a configurable leeway period (default 60 seconds)
- ivar _HAS_KEYRING:
Whether the keyring library is available for secure storage.
- vartype _HAS_KEYRING:
bool
- ivar log:
Module logger for debugging and error reporting.
- vartype log:
logging.Logger
Classes
|
Token persistence for CLI. |
|
Minimal example adapter for Home Assistant storage. |
|
Authentication token payload returned by POST /v1/auth/user. |
|
Abstract persistence for auth tokens. |
- class pybragerone.models.token.CLITokenStore(email: str, service: str = 'pybragerone')[source]¶
Bases:
objectToken persistence for CLI.
- Preference order:
system keyring (if available)
file at ~/.config/pybragerone/token-<email>.json (0600)
- class pybragerone.models.token.HATokenStore(loader: Callable[[], Token | None], saver: Callable[[Token], None], clearer: Callable[[], None])[source]¶
Bases:
TokenStoreMinimal example adapter for Home Assistant storage.
Expects an object with async load/save/clear; wraps sync API expected by
BragerOneApiClient. Replace with your concrete implementation in the HA integration.- Parameters:
- class pybragerone.models.token.Token(**data: Any)[source]¶
Bases:
BaseModelAuthentication token payload returned by POST /v1/auth/user.
- Parameters:
- classmethod from_login_payload(data: dict[str, Any])[source]¶
Create a Token instance from a login response payload.
- is_expired(*, leeway: int = 60)[source]¶
Return True if the token is expired or will expire within leeway seconds.