OSBot-Fast-API
February 4, 2026 ยท View on GitHub
A Type-Safe wrapper around FastAPI that provides strong typing, comprehensive middleware support, HTTP event tracking, and seamless AWS Lambda integration through Mangum.
โจ Key Features
- ๐ Type-Safe First: Automatic bidirectional conversion between Type_Safe classes and Pydantic BaseModels
- ๐ก๏ธ Built-in Middleware: API key validation, CORS, disconnect detection, and HTTP event tracking
- ๐ HTTP Event System: Comprehensive request/response tracking with configurable storage
- ๐ AWS Lambda Ready: Direct integration with Mangum for serverless deployment
- ๐งช Testing Utilities: Built-in test server with Type-Safe support
- ๐ Auto-conversion: Seamless Type_Safe โ BaseModel โ Dataclass conversions
- ๐ Route Organization: Clean route structure with automatic path generation
๐ฆ Installation
pip install osbot-fast-api
๐ Quick Start
Basic Application
from osbot_fast_api.api.Fast_API import Fast_API
from osbot_fast_api.api.routes.Fast_API__Routes import Fast_API__Routes
from osbot_utils.type_safe.Type_Safe import Type_Safe
# Define Type-Safe schema
class User(Type_Safe):
username: str
email: str
age: int
# Create routes
class Routes_Users(Fast_API__Routes):
tag = 'users'
def create_user(self, user: User):
# user is automatically converted from BaseModel to Type_Safe
return {'created': user.username}
def get_user__id(self, id: str): # Becomes /users/get-user/{id}
return {'user_id': id}
def setup_routes(self):
self.add_route_post(self.create_user)
self.add_route_get(self.get_user__id)
# Setup application
fast_api = Fast_API(enable_cors=True)
fast_api.setup()
fast_api.add_routes(Routes_Users)
# Get FastAPI app instance
app = fast_api.app()
With Middleware & Authentication
import os
# Configure API key authentication
os.environ['FAST_API__AUTH__API_KEY__NAME'] = 'X-API-Key'
os.environ['FAST_API__AUTH__API_KEY__VALUE'] = 'your-secret-key'
# Create app with middleware
fast_api = Fast_API(
enable_cors=True, # Enable CORS support
enable_api_key=True, # Enable API key validation
default_routes=True # Add /status, /version routes
)
# Configure HTTP event tracking
fast_api.http_events.max_requests_logged = 100
fast_api.http_events.clean_data = True # Sanitize sensitive headers
fast_api.setup()
๐๏ธ Architecture
OSBot-Fast-API extends FastAPI with a comprehensive Type-Safe layer and monitoring capabilities:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Your Application โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Type-Safe โ โ Routes โ โ Events โ โ
โ โ Schemas โ โ Classes โ โ Handlers โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OSBot-Fast-API โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Type Conversion System โ โ
โ โ Type_Safe โ BaseModel โ Dataclass โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Middleware Pipeline โ โ
โ โ Disconnect โ Events โ CORS โ API Key โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ HTTP Event Tracking System โ โ
โ โ Request/Response/Traces/Monitoring โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FastAPI โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Type-Safe Integration
OSBot-Fast-API automatically converts between Type_Safe classes and Pydantic BaseModels:
from osbot_utils.type_safe.Type_Safe import Type_Safe
from typing import List, Optional
# Define Type-Safe schemas (not Pydantic!)
class Address(Type_Safe):
street: str
city: str
country: str
class Person(Type_Safe):
name: str
age: int
email: Optional[str] = None
addresses: List[Address] = []
# Use directly in routes - automatic conversion happens
class Routes_People(Fast_API__Routes):
tag = 'people'
def create_person(self, person: Person):
# person is Type_Safe instance, not BaseModel
# Full type validation and conversion handled automatically
return person # Automatically converted back to JSON
def setup_routes(self):
self.add_route_post(self.create_person)
๐ HTTP Event Tracking
Built-in comprehensive request/response tracking:
# Configure event tracking
fast_api.http_events.max_requests_logged = 100
fast_api.http_events.clean_data = True # Sanitize sensitive data
fast_api.http_events.trace_calls = True # Enable execution tracing (debug)
# Add event callbacks
def on_request(event):
print(f"Request: {event.http_event_request.path}")
def on_response(response, event):
print(f"Response: {event.http_event_response.status_code}")
print(f"Duration: {event.http_event_request.duration}s")
fast_api.http_events.callback_on_request = on_request
fast_api.http_events.callback_on_response = on_response
๐ก๏ธ Middleware Stack
Built-in middleware pipeline (in execution order):
- Detect_Disconnect: Monitor client disconnections
- Http_Request: Event tracking and logging
- CORS: Cross-origin resource sharing
- API_Key_Check: Header/cookie API key validation
Custom Middleware
class Custom_Fast_API(Fast_API):
def setup_middlewares(self):
super().setup_middlewares() # Add default middleware
@self.app().middleware("http")
async def add_process_time(request: Request, call_next):
import time
start = time.time()
response = await call_next(request)
response.headers["X-Process-Time"] = str(time.time() - start)
return response
๐งช Testing
Built-in test server with Type-Safe support:
from osbot_fast_api.utils.Fast_API_Server import Fast_API_Server
def test_api():
fast_api = Fast_API()
fast_api.setup()
fast_api.add_routes(Routes_Users)
with Fast_API_Server(app=fast_api.app()) as server:
# Test with Type-Safe object
user_data = {'username': 'alice', 'email': 'alice@example.com', 'age': 30}
response = server.requests_post('/users/create-user', data=user_data)
assert response.status_code == 200
assert response.json()['created'] == 'alice'
๐ AWS Lambda Deployment
from mangum import Mangum
from osbot_fast_api.api.Fast_API import Fast_API
# Create and setup application
fast_api = Fast_API()
fast_api.setup()
fast_api.add_routes(Routes_Users)
# Create Lambda handler
app = fast_api.app()
handler = Mangum(app)
def lambda_handler(event, context):
return handler(event, context)
๐ Project Structure
osbot_fast_api/
โโโ api/
โ โโโ Fast_API.py # Main FastAPI wrapper
โ โโโ Fast_API__Routes.py # Route organization base class
โ โโโ Fast_API__Http_Event*.py # Event tracking components
โ โโโ middlewares/ # Built-in middleware
โโโ utils/
โ โโโ type_safe/ # Type conversion system
โ โ โโโ Type_Safe__To__BaseModel.py
โ โ โโโ BaseModel__To__Type_Safe.py
โ โ โโโ ...
โ โโโ Fast_API_Server.py # Test server
โ โโโ Fast_API_Utils.py # Utilities
โโโ examples/ # Usage examples
๐ Documentation
Comprehensive documentation is available in the /docs folder:
- ๐ Main Documentation
- ๐๏ธ Architecture Overview
- ๐ Type-Safe Integration
- ๐ HTTP Events System
- ๐ก๏ธ Middleware Stack
- ๐ Quick Start Guide
- ๐ค LLM Prompts
- ๐งช Testing Guide
๐ฏ Key Benefits
For Developers
- Type Safety: Catch errors at development time with Type_Safe validation
- Less Boilerplate: Convention over configuration approach
- Auto-conversion: Seamless type conversions at API boundaries
- Built-in Testing: Integrated test server and utilities
For Production
- Monitoring: Comprehensive HTTP event tracking
- Security: Built-in API key validation and header sanitization
- Performance: Cached type conversions and efficient middleware
- AWS Ready: Direct Lambda integration with Mangum
For Teams
- Organized Code: Clear separation with Fast_API__Routes classes
- Consistent Patterns: Standardized route naming and structure
- Easy Testing: Type-Safe test utilities
- Documentation: Auto-generated OpenAPI/Swagger docs
๐ง Advanced Features
Route Path Generation
get_users()โ/get-usersget_user__id()โ/get-user/{id}user__id_posts__post_id()โ/user/{id}/posts/{post_id}
Type-Safe Primitives
from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
class Email(Type_Safe__Primitive, str):
def __new__(cls, value):
if '@' not in value:
raise ValueError("Invalid email")
return super().__new__(cls, value)
Event Access in Routes
from fastapi import Request
def get_request_info(self, request: Request):
return {
'event_id': str(request.state.request_id),
'thread_id': request.state.request_data.http_event_info.thread_id
}
๐ค Contributing
Contributions are welcome! Please check the documentation for architecture details and patterns.
๐ License
This project is licensed under the Apache 2.0 License.
๐ Related Projects
- OSBot-Utils - Core Type-Safe implementation
- OSBot-AWS - AWS utilities
- OSBot-Fast-API-Serverless - Serverless extensions
๐ก Examples
For more examples, see:
Built with โค๏ธ using Type-Safe principles for robust, maintainable APIs