Skip to content

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

Functions

ensure_timezone_aware(v) classmethod

Ensure datetime fields are timezone-aware.

validate_name(v: str) -> str classmethod

Validate environment name.

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.