Skip to main content

Generic web app infrastructure: PostgreSQL pooling, structured logging, rate limiting, FastAPI middleware, auth service, gateway proxy

Project description

app-platform

Generic web app infrastructure for PostgreSQL pooling, structured logging, auth, middleware, and gateway proxying.

Installation

pip install app-platform
pip install "app-platform[all]"
pip install "app-platform[fastapi]"
pip install "app-platform[auth-google]"
pip install "app-platform[gateway]"

Included subpackages

Subpackage Provides
db PostgreSQL connection pooling, pooled session helpers, migrations, and database exception utilities
logging Structured file and JSONL logging, context helpers, logger access, and decorators for timing/error instrumentation
middleware FastAPI middleware configuration for rate limiting, sessions, CORS, and validation/error handling
auth Pluggable auth service base with in-memory and PostgreSQL-backed user/session stores
gateway FastAPI router factory for proxying chat and tool approval requests to an upstream gateway

Quick usage

Database

import os

from app_platform.db import PoolManager, get_db_session

os.environ["DATABASE_URL"] = "postgresql://postgres:postgres@localhost:5432/app"

pool_manager = PoolManager(min_connections=2, max_connections=10)
pool_manager.get_pool()

with get_db_session() as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT 1 AS ok")
        print(cursor.fetchone())

pool_manager.close()

Logging

from app_platform.logging import (
    LoggingManager,
    configure_logging,
    log_errors,
    log_operation,
    log_timing,
)

logging_manager: LoggingManager = configure_logging(app_name="orders", log_dir="./logs")
logger = logging_manager.get_logger("service")

@log_errors()
@log_timing(threshold_s=0.25)
@log_operation("create_order")
def create_order(order_id: str) -> None:
    logger.info("creating order %s", order_id)


create_order("ord_123")

Auth

from app_platform.auth import AuthServiceBase, InMemorySessionStore, InMemoryUserStore

users = {}
sessions = {}

auth = AuthServiceBase(
    session_store=InMemorySessionStore(users_dict=users, sessions_dict=sessions),
    user_store=InMemoryUserStore(users_dict=users),
)

session_id = auth.create_user_session(
    {
        "google_user_id": "user-123",
        "email": "user@example.com",
        "name": "Example User",
    }
)

print(auth.get_user_by_session(session_id))

Gateway

from fastapi import FastAPI

from app_platform.gateway import GatewayConfig, create_gateway_router

app = FastAPI()


def get_current_user():
    return {"user_id": "user-123", "email": "user@example.com"}


gateway_router = create_gateway_router(
    GatewayConfig(
        gateway_url="https://gateway.example.com",
        api_key="gateway-api-key",
        channel="web",
    ),
    get_current_user=get_current_user,
)

app.include_router(gateway_router, prefix="/gateway")

Requirements

Python 3.11+

License

MIT

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

app_platform-0.3.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

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

app_platform-0.3.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file app_platform-0.3.0.tar.gz.

File metadata

  • Download URL: app_platform-0.3.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for app_platform-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8db8e3382683f102e3abeecbb97f2cefa03f79681ad14dd814be078a5ce33b83
MD5 25d4a8ce07e7630a3937d491fec9c43e
BLAKE2b-256 1f9dfe2e19af757db281c881c985b96929f626c73ac706fbcdb43973db48b38f

See more details on using hashes here.

File details

Details for the file app_platform-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: app_platform-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 39.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for app_platform-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0e3d1dd0c5c6423548fffadd6d8c224dcc47fdd12de891189a155d823e192c8
MD5 1a8a919f6e3fdf210b724b1873f5a005
BLAKE2b-256 ee3efc270b1cf3c8e98931b13bcb97a93baf21bc463b9e5ad926b7cdf1400a81

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