Revolutionary Hybrid Async/Sync Web Framework for Python
Project description
๐ QakeAPI 1.2.0
Revolutionary Hybrid Async/Sync Web Framework for Python
โก The first framework with seamless sync/async support and reactive architecture
โจ What Makes QakeAPI Unique?
QakeAPI is a completely new approach to web frameworks:
- ๐ Hybrid Sync/Async โ write sync and async code simultaneously
- โก Reactive Routing โ reactive routing and events
- ๐ Parallel Dependencies โ automatic dependency parallelism
- ๐ Pipeline Composition โ function composition into pipelines
- ๐ฏ Smart Routing โ intelligent routing based on conditions
Key Features:
- โ Zero Dependencies โ only Python standard library
- โ Production-Ready โ ready for real-world projects
- โ Performance โ automatic parallelism, optimized routing (Trie-based)
- โ Simplicity โ intuitive syntax
- โ Flexibility โ simultaneous sync and async support
- โ OpenAPI/Swagger โ automatic API documentation
- โ WebSocket Support โ real-time communication
- โ Background Tasks โ asynchronous task processing
- โ Middleware System โ customizable request/response processing
- โ CORS Support โ built-in CORS middleware
- โ Dependency Injection โ clean architecture with DI
- โ Rate Limiting โ built-in rate limiting decorator
- โ Caching โ response caching with TTL
- โ Request Validation โ automatic data validation
- โ File Upload โ multipart file upload with validation
- โ Security โ request size limits, validation, error handling
๐ Quick Start
Installation
pip install qakeapi
Simple Example
from qakeapi import QakeAPI, CORSMiddleware
app = QakeAPI(
title="My API",
version="1.2.0",
description="My awesome API"
)
# Add CORS middleware
app.add_middleware(CORSMiddleware(allow_origins=["*"]))
# Sync function works automatically!
@app.get("/users/{id}")
def get_user(id: int):
return {"id": id, "name": f"User {id}"}
# Async function is also supported
@app.get("/items/{item_id}")
async def get_item(item_id: int):
return {"item_id": item_id}
# POST with automatic body extraction
@app.post("/users")
async def create_user(request):
data = await request.json()
return {"message": "User created", "data": data}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Access the API documentation:
- Swagger UI:
http://localhost:8000/docs - OpenAPI JSON:
http://localhost:8000/openapi.json
๐ Core Features
1. Hybrid Sync/Async
Write synchronous code, the framework automatically handles it:
@app.get("/users/{id}")
def get_user(id: int): # Regular function!
# Blocking operations automatically executed in executor
user = database.get_user(id)
posts = database.get_user_posts(id)
return {"user": user, "posts": posts}
2. Parallel Dependencies
Dependencies execute in parallel:
@app.get("/dashboard")
async def dashboard(
user: User = get_user(),
stats: Stats = get_stats(),
notifications: list = get_notifications()
):
# All three functions execute in parallel!
return {
"user": user,
"stats": stats,
"notifications": notifications
}
3. Reactive Events
React to events in your application:
@app.react("order:created")
async def on_order_created(event):
order = event.data
await inventory.reserve(order.items)
await payment.process(order)
await shipping.schedule(order)
# Emit event
await app.emit("order:created", order_data)
4. Pipeline Composition
Compose functions into pipelines:
@app.pipeline([
authenticate,
authorize,
validate,
transform,
save
])
def create_resource(data: ResourceData):
return {"id": data.id, "status": "created"}
5. Smart Routing
Conditional routing based on conditions:
@app.when(lambda req: req.headers.get("X-Client") == "mobile")
def mobile_handler(request):
return {"mobile": True}
@app.when(lambda req: req.path.startswith("/api/v2"))
def v2_handler(request):
return {"version": "2.0"}
6. Automatic API Documentation
OpenAPI/Swagger documentation is automatically generated:
app = QakeAPI(
title="My API",
version="1.2.0",
description="API documentation"
)
# All routes are automatically documented
@app.get("/users/{id}")
def get_user(id: int):
"""Get user by ID."""
return {"id": id}
7. WebSocket Support
Real-time communication:
@app.websocket("/ws/{room}")
async def websocket_handler(websocket: WebSocket, room: str):
await websocket.accept()
await websocket.send_json({"message": f"Welcome to {room}!"})
async for message in websocket.iter_json():
await websocket.send_json({"echo": message})
8. Background Tasks
Run tasks asynchronously:
from qakeapi.core.background import add_background_task
@app.post("/process")
async def process_data(request):
data = await request.json()
# Run task in background
await add_background_task(process_heavy_task, data)
return {"message": "Processing started"}
9. Middleware System
Customize request/response processing:
from qakeapi import CORSMiddleware, LoggingMiddleware, RequestSizeLimitMiddleware
app.add_middleware(CORSMiddleware(allow_origins=["*"]))
app.add_middleware(LoggingMiddleware())
app.add_middleware(RequestSizeLimitMiddleware(max_size=10 * 1024 * 1024)) # 10MB
10. Dependency Injection
Clean architecture with dependency injection:
from qakeapi import QakeAPI, Depends
app = QakeAPI()
def get_database():
return Database()
@app.get("/users")
async def get_users(db = Depends(get_database)):
return await db.get_users()
11. Rate Limiting
Protect your API with rate limiting:
from qakeapi import rate_limit
@rate_limit(requests_per_minute=60)
@app.get("/api/data")
def get_data():
return {"data": "..."}
12. Response Caching
Cache responses for better performance:
from qakeapi import cache
@cache(ttl=300) # Cache for 5 minutes
@app.get("/expensive-operation")
def expensive_operation():
return {"result": compute_expensive_result()}
13. File Upload
Handle file uploads with validation and security:
from qakeapi import QakeAPI, FileUpload, IMAGE_TYPES
@app.post("/upload")
async def upload_image(file: FileUpload):
# Validate file type
if not file.validate_type(IMAGE_TYPES):
return {"error": "Only images"}, 400
# Validate size (5MB)
if not file.validate_size(5 * 1024 * 1024):
return {"error": "File too large"}, 400
# Save file
path = await file.save("uploads/")
return {"path": path}
๐ฆ Architecture
qakeapi/
โโโ core/ # Core components
โ โโโ app.py # Main QakeAPI class
โ โโโ hybrid.py # Hybrid executor (syncโasync)
โ โโโ router.py # Smart router (Trie-optimized)
โ โโโ reactive.py # Reactive engine
โ โโโ parallel.py # Parallel resolver
โ โโโ pipeline.py # Pipeline processor
โ โโโ request.py # HTTP Request
โ โโโ response.py # HTTP Response
โ โโโ middleware.py # Middleware system
โ โโโ websocket.py # WebSocket support
โ โโโ background.py # Background tasks
โ โโโ openapi.py # OpenAPI generation
โ โโโ files.py # File upload handling
โ โโโ dependencies.py # Dependency Injection
โ โโโ validation.py # Data validation
โ โโโ rate_limit.py # Rate limiting
โ โโโ caching.py # Response caching
โ โโโ logging.py # Logging system
โ โโโ exceptions.py # HTTP exceptions
โโโ utils/ # Utilities
๐ Documentation
Full documentation is available in the docs/ directory:
- Getting Started - Quick start guide
- File Upload - File upload handling
- Routing Guide - Routing, handlers, and performance optimizations
- Dependency Injection - DI system for clean architecture
- Reactive System - Event-driven architecture
- Parallel Dependencies - Parallel dependency resolution
- Pipelines - Function pipelines
- Middleware - Middleware system and security
- WebSocket - WebSocket support
- Background Tasks - Background processing
- OpenAPI - API documentation
- API Reference - Complete API reference
๐ฏ Examples
Check out the examples/ directory for complete examples:
basic_example.py- Basic features demonstrationcomplete_example.py- Full feature showcasefile_upload_example.py- File upload handlingfinancial_calculator.py- Complex real-world application
๐ง Requirements
- Python 3.9+
- uvicorn (optional, for running the server)
๐ License
MIT License - see LICENSE for details.
๐ Acknowledgments
QakeAPI is built from scratch using only Python standard library, demonstrating a new approach to web frameworks.
QakeAPI - Build modern APIs with revolutionary approach! ๐
Made with โค๏ธ by the QakeAPI team
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 qakeapi-1.2.0.tar.gz.
File metadata
- Download URL: qakeapi-1.2.0.tar.gz
- Upload date:
- Size: 66.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
773e0b65209240b07cf6d0d737b2186434c87a63ff3b667074552613c49f2f86
|
|
| MD5 |
beea748218e1ffaaf577c423715213c5
|
|
| BLAKE2b-256 |
04a95abd690a6c198d2653236a1e9403ee46e8dda0451e9c284fc8127213d3da
|
File details
Details for the file qakeapi-1.2.0-py3-none-any.whl.
File metadata
- Download URL: qakeapi-1.2.0-py3-none-any.whl
- Upload date:
- Size: 54.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36561a6d78e96475e8da1ebdd0ba737a6f3248634ff7ac37ee3d55c229f31f9b
|
|
| MD5 |
1398ff65a7fa54a6f489b9351ac0004a
|
|
| BLAKE2b-256 |
0a7e74872d4290091a2797fc62dc425dc941f5e1a13f45be8943c930b356c528
|