Core API¶
CredentialManager¶
dbcreds.core.manager.CredentialManager(config_dir: Optional[str] = None)
¶
Main credential management class.
Orchestrates credential storage and retrieval across multiple backends, manages environments, and handles password expiration.
Attributes: config_dir: Directory for configuration files backends: List of available credential backends environments: Dictionary of configured environments
Examples: >>> manager = CredentialManager() >>> manager.add_environment("dev", DatabaseType.POSTGRESQL) >>> manager.set_credentials("dev", "localhost", 5432, "mydb", "user", "pass") >>> creds = manager.get_credentials("dev")
Initialize the credential manager.
Args: config_dir: Optional custom configuration directory. Defaults to ~/.dbcreds
Functions¶
add_environment(name: str, database_type: DatabaseType, description: Optional[str] = None, is_production: bool = False) -> Environment
¶
Add a new environment configuration.
Args: name: Environment name (e.g., 'dev', 'prod') database_type: Type of database description: Optional description is_production: Whether this is a production environment
Returns: Created Environment object
Raises: CredentialError: If environment already exists
Examples: >>> manager.add_environment("dev", DatabaseType.POSTGRESQL, "Development database")
get_credentials(environment: str, check_expiry: bool = True) -> DatabaseCredentials
¶
Retrieve credentials for an environment.
Args: environment: Environment name check_expiry: Whether to check for password expiration
Returns: DatabaseCredentials object
Raises: CredentialNotFoundError: If credentials not found PasswordExpiredError: If password has expired
Examples: >>> creds = manager.get_credentials("dev") >>> print(creds.host, creds.port)
list_environments() -> List[Environment]
¶
List all configured environments.
Returns: List of Environment objects
Examples: >>> envs = manager.list_environments() >>> for env in envs: ... print(env.name, env.database_type)
remove_environment(name: str) -> None
¶
Remove an environment and its credentials.
Args: name: Environment name to remove
Raises: CredentialNotFoundError: If environment doesn't exist
set_credentials(environment: str, host: str, port: int, database: str, username: str, password: str, password_expires_days: Optional[int] = 90, **options) -> DatabaseCredentials
¶
Store credentials for an environment.
Args: environment: Environment name host: Database host port: Database port database: Database name username: Database username password: Database password password_expires_days: Days until password expires (None for no expiry) **options: Additional connection options
Returns: Created DatabaseCredentials object
Raises: CredentialNotFoundError: If environment doesn't exist
Examples: >>> manager.set_credentials("dev", "localhost", 5432, "mydb", "user", "pass")
test_connection(environment: str) -> bool
¶
Test database connection for an environment.
Args: environment: Environment name
Returns: True if connection successful, False otherwise
Examples: >>> if manager.test_connection("dev"): ... print("Connection successful!")
Models¶
dbcreds.core.models.DatabaseCredentials
¶
Bases: BaseModel
Database connection credentials.
Secure storage model for database connection information.
Attributes: environment: Environment name host: Database server hostname or IP port: Database server port database: Database name username: Database username password: Database password (stored securely) options: Additional connection options ssl_mode: SSL connection mode password_updated_at: When the password was last updated password_expires_at: When the password expires
Functions¶
days_until_expiry() -> Optional[int]
¶
Get the number of days until password expiry.
ensure_timezone_aware(v)
classmethod
¶
Ensure datetime fields are timezone-aware.
get_connection_string(include_password: bool = True, driver: Optional[str] = None) -> str
¶
Generate a connection string for the database.
Args: include_password: Whether to include the password in the connection string driver: Optional driver override for the connection string
Returns: Database connection URI
Examples: >>> creds.get_connection_string() 'postgresql://user:pass@localhost:5432/mydb' >>> creds.get_connection_string(include_password=False) 'postgresql://user@localhost:5432/mydb'
is_password_expired() -> bool
¶
Check if the password has expired.
validate_port(v: int, info) -> int
classmethod
¶
Set default port based on database type if not specified.
dbcreds.core.models.Environment
¶
Bases: BaseModel
Database environment configuration.
Represents a named database environment (e.g., dev, staging, prod) with its associated settings.
Attributes: name: Environment name (e.g., 'dev', 'prod') database_type: Type of database description: Optional description of the environment is_production: Whether this is a production environment created_at: When the environment was created updated_at: When the environment was last updated
dbcreds.core.models.DatabaseType
¶
Bases: str, Enum
Supported database types.
Exceptions¶
dbcreds.core.exceptions
¶
Custom exceptions for dbcreds.
This module defines all custom exceptions used throughout the package.
Classes¶
BackendError
¶
Bases: CredentialError
Raised when a backend operation fails.
CredentialError
¶
Bases: Exception
Base exception for all credential-related errors.
CredentialNotFoundError
¶
Bases: CredentialError
Raised when requested credentials are not found.
PasswordExpiredError
¶
Bases: CredentialError
Raised when a password has expired.
ValidationError
¶
Bases: CredentialError
Raised when credential validation fails.