Skip to main content

Shared common utilities for Python backend services

Project description

Backend Common Package

A shared utilities package for Python backend microservices, providing standardized components for authentication, HTTP communication, database management, and more.

Features

Common Exceptions - Standardized error handling with correlation tracking
Authentication & Authorization - JWT-based auth with FastAPI dependencies
HTTP Client Utilities - Robust HTTP clients with retry logic and service auth
Database Management - SQLAlchemy async session handling with health checks
Middleware Components - Logging, correlation IDs, and authentication middleware
Health Monitoring - Service health checks and dependency monitoring
Configuration Management - Pydantic-based settings with environment support
Utility Functions - Time handling, validation, and common operations

Installation

# Install from PyPI (once published)
pip install backend-common

# Or using uv
uv add backend-common

# Install from git repository
pip install git+https://github.com/your-org/backend-common.git

Quick Start

1. Basic FastAPI Integration

from fastapi import FastAPI, Depends
from backend_common.middleware import CorrelationMiddleware, LoggingMiddleware
from backend_common.auth.dependencies import require_auth
from backend_common.exceptions import NotFoundError
from backend_common.models import HealthResponse

app = FastAPI()

# Add middleware
app.add_middleware(CorrelationMiddleware)
app.add_middleware(LoggingMiddleware)

@app.get("/protected", dependencies=[Depends(require_auth())])
async def protected_endpoint():
    return {"message": "This endpoint requires authentication"}

@app.get("/health", response_model=HealthResponse)
async def health_check():
    return HealthResponse.healthy("my-service")

2. Database Setup

from backend_common.database import DatabaseManager, set_database_manager
from backend_common.config import ServiceConfig

# Initialize configuration
config = ServiceConfig(
    service_name="my-service",
    database_url="postgresql+asyncpg://user:pass@localhost/db"
)

# Setup database manager
db_manager = DatabaseManager(config.database_url)
set_database_manager(db_manager)

# Use in endpoints
from backend_common.database import get_db_session

@app.get("/users")
async def get_users(db: AsyncSession = Depends(get_db_session)):
    # Use database session
    pass

3. Service Communication

from backend_common.http_client import ServiceClient
from backend_common.auth.manager import JWTAuthManager

# Setup service client
auth_manager = JWTAuthManager(secret_key="your-secret")
client = ServiceClient(
    service_name="my-service",
    base_url="http://other-service:8000",
    auth_manager=auth_manager
)

# Make authenticated requests
async with client:
    response = await client.get("/api/data")
    data = response.json()

Configuration

The package uses Pydantic settings for configuration management:

from backend_common.config import ServiceConfig

config = ServiceConfig(
    service_name="my-service",
    database_url="postgresql+asyncpg://...",
    jwt_secret_key="your-secret-key",
    environment="production"
)

Environment variables are automatically loaded from .env files or system environment.

Exception Handling

Standardized exceptions with correlation tracking:

from backend_common.exceptions import NotFoundError, ValidationError

# Business logic exceptions
raise NotFoundError("User", "123")
raise ValidationError("email", "invalid@", "Must be valid email")

# HTTP exceptions  
raise UnauthorizedError("Invalid token")
raise ServiceUnavailableError("user-service", "Connection timeout")

Health Checks

Built-in health monitoring for services and dependencies:

from backend_common.http_client import HealthChecker
from backend_common.models import HealthStatus

# Setup health checker
health_checker = HealthChecker({
    "database": "http://localhost:5432/health",
    "redis": "http://localhost:6379/health"
})

await health_checker.start_monitoring()

# Check service health
status = health_checker.get_service_status("database")
is_healthy = status.status == HealthStatus.HEALTHY

Development

Setup Development Environment

# Clone repository
git clone https://github.com/your-org/backend-common.git
cd backend-common

# Install dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black src/
isort src/

# Type checking
mypy src/

Publishing to PyPI

# Build package
python -m build

# Upload to PyPI
python -m twine upload dist/*

License

MIT License - see LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

Support

For issues and questions, please use the GitHub issue tracker.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

backend_common_kato-0.0.5.tar.gz (101.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

backend_common_kato-0.0.5-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

Details for the file backend_common_kato-0.0.5.tar.gz.

File metadata

  • Download URL: backend_common_kato-0.0.5.tar.gz
  • Upload date:
  • Size: 101.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for backend_common_kato-0.0.5.tar.gz
Algorithm Hash digest
SHA256 16e9ac030f87f5929ba0407e8bbc575dc1e1f1ab63d7ae42711cb5889eeca6f8
MD5 b0739394451c13f6869784fc3cfd48ef
BLAKE2b-256 4ebb6b002c590a9a63445ce071659b8d2fde8237d9de4b4a0bed9f6fcbf5aef0

See more details on using hashes here.

File details

Details for the file backend_common_kato-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for backend_common_kato-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8510017c32d865973221b89cdaa57d0dab9b1ff7c073a8fcee2d6432088de4ae
MD5 e0f2447258713f425e5ab41f432c8594
BLAKE2b-256 4811bac068f87fcc5feb0d520545fb7b1e09ee4782460c89f421cf42edfb5feb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page