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.6.1.tar.gz (52.2 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.6.1-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: app_platform-0.6.1.tar.gz
  • Upload date:
  • Size: 52.2 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.6.1.tar.gz
Algorithm Hash digest
SHA256 441dc469a5e26314cf4306178aa18707e30e10d24748ace32800f3fa28a3b097
MD5 bfaefbd0f9c055c5a3ddc6607aac9e49
BLAKE2b-256 c7fbab87daa26416b4a979b05e5b650f85e68ff69db3d5d9e7e025aa03f827c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: app_platform-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 41.5 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.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4a6b2b0f13f752473d85f5a8c6871d3fec5977d9763ad693d6fb94f13f00c48d
MD5 22c9d505f9cc03b25d7ebefce0c2c4a2
BLAKE2b-256 36182cf5dde943d434c248025b0d07f21bb218233184d814e54d8ca17b302db6

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