Add your description here
Project description
appkit-commons
Shared utilities and infrastructure for AppKit components.
appkit-commons provides the foundational infrastructure used across all AppKit packages, including configuration management, database integration, logging, security utilities, and dependency injection. It serves as the common base layer that enables consistent behavior and shared functionality across the AppKit ecosystem.
✨ Features
- Configuration Management - YAML-based configuration with environment variable overrides and secret handling
- Database Integration - SQLAlchemy-based ORM with PostgreSQL support, connection pooling, and encryption
- Logging Infrastructure - Structured logging with color output and configurable levels
- Security Utilities - Password hashing with PBKDF2 and scrypt, secure random generation
- Service Registry - Dependency injection container for managing application services
- Secret Management - Support for local secrets and Azure Key Vault integration
🚀 Installation
As Part of AppKit Workspace
If you're using the full AppKit workspace:
git clone https://github.com/jenreh/appkit.git
cd appkit
uv sync
Standalone Installation
Install from PyPI:
pip install appkit-commons
Or with uv:
uv add appkit-commons
Optional Dependencies
For Azure Key Vault support:
pip install appkit-commons[azure]
# or
uv add appkit-commons[azure]
Dependencies
colorlog>=6.9.0(colored logging)cryptography>=46.0.2(encryption utilities)pydantic-settings>=2.10.1(configuration management)pyyaml==6.0.2(YAML configuration)sqlalchemy-utils==0.42.0(database utilities)sqlalchemy==2.0.41(ORM)
🏁 Quick Start
Basic Configuration
Create a configuration class extending BaseConfig:
from appkit_commons.configuration import BaseConfig
class MyConfig(BaseConfig):
app_name: str = "MyApp"
debug: bool = False
api_key: str = "secret:api_key" # Will be resolved from secrets
Load configuration from YAML and environment:
from appkit_commons.configuration import load_configuration
config = load_configuration(MyConfig, "config.yaml")
print(f"App: {config.app_name}, Debug: {config.debug}")
Database Setup
Configure database connection:
from appkit_commons.database import DatabaseConfig, create_session_manager
db_config = DatabaseConfig(
type="postgresql",
host="localhost",
port=5432,
name="myapp",
username="user",
password="secret:db_password"
)
session_manager = create_session_manager(db_config)
# Use in your code
with session_manager.session() as session:
# Your database operations
pass
Logging Setup
Initialize logging with configuration:
from appkit_commons.configuration import setup_logging
# Setup with default configuration
setup_logging()
# Or with custom config
setup_logging(log_level="DEBUG", log_file="app.log")
📖 Usage
Configuration System
BaseConfig
All configuration classes should inherit from BaseConfig:
from appkit_commons.configuration import BaseConfig
class AppConfig(BaseConfig):
model_config = {"env_prefix": "MYAPP_"}
database_url: str = "postgresql://localhost/mydb"
api_timeout: int = 30
features: dict[str, bool] = {"new_ui": True}
Secret Resolution
Use secret: prefix for sensitive values:
class SecureConfig(BaseConfig):
api_key: str = "secret:openai_api_key" # Resolved from env or Key Vault
db_password: str = "secret:database_password"
YAML Configuration
Configuration files support nested structures:
# config.yaml
app:
name: "MyApp"
database:
host: "localhost"
port: 5432
features:
- "authentication"
- "file_upload"
Database Integration
Session Management
Use the session manager for database operations:
from appkit_commons.database import create_session_manager
manager = create_session_manager(db_config)
# Get a session
with manager.session() as session:
# Perform operations
result = session.execute(text("SELECT 1"))
print(result.scalar())
Entity Base Classes
Extend from BaseEntity for common database fields:
from appkit_commons.database import BaseEntity
from sqlalchemy import Column, String
class User(BaseEntity):
__tablename__ = "users"
email = Column(String, unique=True, nullable=False)
name = Column(String, nullable=False)
Security Utilities
Password Hashing
from appkit_commons.security import hash_password, verify_password
# Hash a password
hashed = hash_password("mypassword")
# Verify a password
is_valid = verify_password("mypassword", hashed)
Secure Random Generation
from appkit_commons.security import generate_token
token = generate_token(length=32)
Service Registry
Dependency Injection
Register and retrieve services:
from appkit_commons.registry import service_registry
# Register a service
service_registry.register(MyService())
# Retrieve a service
service = service_registry.get(MyService)
🔧 Configuration
Environment Variables
Configuration supports nested environment variables:
export MYAPP_APP__NAME="ProductionApp"
export MYAPP_DATABASE__HOST="prod-db.example.com"
export MYAPP_API__TIMEOUT="60"
Azure Key Vault
For production secrets, configure Azure Key Vault:
from appkit_commons.configuration import configure_azure_key_vault
configure_azure_key_vault(
vault_url="https://myvault.vault.azure.net/",
credential=None # Uses DefaultAzureCredential
)
Logging Configuration
Customize logging output:
from appkit_commons.configuration import setup_logging
setup_logging(
level="INFO",
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
file="app.log",
max_file_size="10 MB",
backup_count=5
)
📋 API Reference
Configuration
BaseConfig- Base class for all configuration objectsload_configuration()- Load configuration from YAML and environmentsetup_logging()- Initialize logging systemconfigure_azure_key_vault()- Setup Azure Key Vault integration
Database
DatabaseConfig- Database connection configurationcreate_session_manager()- Create database session managerBaseEntity- Base class for database entities
Security
hash_password()- Hash passwords with PBKDF2 or scryptverify_password()- Verify password against hashgenerate_token()- Generate secure random tokens
Registry
service_registry- Global service registry instanceServiceRegistry- Dependency injection container
🔒 Security
[!IMPORTANT] Always use
SecretStrfor sensitive configuration values and thesecret:prefix for automatic resolution from secure sources.
- Passwords are hashed using industry-standard algorithms (PBKDF2/scrypt)
- Database credentials support encryption at rest
- Azure Key Vault integration for production secret management
- Secure random generation for tokens and salts
🤝 Integration Examples
With AppKit Components
appkit-commons is automatically integrated into other AppKit packages:
# Configuration is inherited by appkit-user, appkit-assistant, etc.
from appkit_user.configuration import UserConfig
user_config = UserConfig() # Extends BaseConfig automatically
Custom Application Setup
Complete application bootstrap:
from appkit_commons.configuration import load_configuration, setup_logging
from appkit_commons.database import create_session_manager
from appkit_commons.registry import service_registry
# Load config
config = load_configuration(MyAppConfig, "config.yaml")
# Setup logging
setup_logging(level=config.log_level)
# Setup database
db_manager = create_session_manager(config.database)
service_registry.register(db_manager)
# Your app logic here
📚 Related Components
- appkit-user - User authentication and authorization
- appkit-assistant - AI assistant functionality
- appkit-mantine - UI components
- appkit-imagecreator - Image generation workflows
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file appkit_commons-1.9.0.tar.gz.
File metadata
- Download URL: appkit_commons-1.9.0.tar.gz
- Upload date:
- Size: 58.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa57b7c1c94f62faa675f8a4dacbaf1de14bdd3cfea165d179387ad08c66d4ca
|
|
| MD5 |
2be286748bfc01c8c466ace94ae8626a
|
|
| BLAKE2b-256 |
5237345238bf3bd22612a6e19e6928c1291327dd8f55199ea6b58b6ae1625b41
|
File details
Details for the file appkit_commons-1.9.0-py3-none-any.whl.
File metadata
- Download URL: appkit_commons-1.9.0-py3-none-any.whl
- Upload date:
- Size: 35.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1a363f2a229c8acd101a9910d1a64c27b5452ab615738305a614c823ea8e632
|
|
| MD5 |
359f785f69e03ea28531fae600684f24
|
|
| BLAKE2b-256 |
a94dc42cff97abe3d1b163be8a2c3d59b93a2d575cc76732fab266c6e919fcc5
|