Introducing Flask-Nova: Zero-Boilerplate APIs with Docs & Type Safety
๐ Flask-Nova
Flask is celebrated for its simplicity and flexibility, but building a modern API with authentication, validation, and documentation often becomes a repetitive chore.
Flask-Nova is a modern extension for Flask that accelerates API development with automatic OpenAPI documentation and type-safe input models.
๐ Links
๐ฅ Key Features
- ✅ Auto-generated Swagger docs at
/docs
- ✅ Typed route inputs using Pydantic-style models
- ✅ Decorator-based routing with zero boilerplate
- ✅ Built-in
HTTPException
for error handling - ✅
status
helpers (e.g.,status.CREATED
) - ✅
Depend()
for clean dependency injection - ✅ Extensible and Pythonic design
- ✅ Compatible with native Flask
๐ Installation
pip install flask-nova
๐ฆ Basic Example
Define a route with type-safe input:
from flask_nova import FlaskNova, NovaBlueprint
app = FlaskNova(__name__)
route = NovaBlueprint("dev", __name__)
class RegisterData(RequestModel):
username: str
email: str
@route.post("/register")
def register(data: RegisterData):
return {"msg": "User registered", "data": data.model_dump()}
app.register_blueprint(route)
# app.run(debug=True)
๐งฉ Dependency Injection
from flask_nova import Depend, FlaskNova, NovaBlueprint
app = FlaskNova(__name__)
route = NovaBlueprint("dev", __name__)
def get_current_user():
return {"id": 1, "username": "admin"}
@route.get("/me")
def me(user=Depend(get_current_user)):
return {"user": user}
app.register_blueprint(route)
๐ Route Metadata
from flask_nova import FlaskNova, NovaBlueprint
from pydantic import BaseModel
app = FlaskNova(__name__)
auth_bp = NovaBlueprint("auth", __name__)
class LoginInput(BaseModel):
username: str
password: str
class LoginOut(BaseModel):
access_token: str
refresh_token: str
@auth_bp.route(
"/login",
methods=["POST"],
summary="Login user",
description="Authenticate user and return JWT tokens.",
response_model=LoginOut,
tags=["Auth"]
)
def login(data: LoginInput):
return {"access_token": "abc.123", "refresh_token": "xyz.456"}
app.register_blueprint(auth_bp)
❗ Error Handling
from flask_nova import HTTPException, status
raise HTTPException(
status_code=status.NOT_FOUND,
detail="Item not found",
title="Not Found"
)
๐ Common Status Codes
from flask_nova import status
print(status.OK) # 200
print(status.CREATED) # 201
print(status.NOT_FOUND) # 404
๐ข Logging
from flask_nova import get_flasknova_logger
log = get_flasknova_logger()
⚙️ Swagger Configuration
app.setup_swagger(info={
"title": "FlaskNova API",
"version": "1.2.3",
"description": "Beautiful API for modern apps.",
"contact": {
"name": "Team FlaskNova",
"url": "https://github.com/flasknova"
}
})
Change Swagger route:
FLASKNOVA_SWAGGER_ROUTE=/api-docs
Disable Swagger UI in production:
FLASKNOVA_SWAGGER_ENABLED=False
๐งช Example App
๐ Feedback & Contributions
If you:
- ⭐ Like the idea — star the repo
- ๐ Found a bug — open an issue
- ๐ก Have ideas — let's chat!
- ๐ค Want to contribute — pull requests welcome
GitHub: https://github.com/manitreasure1/flasknova
PyPI: https://pypi.org/project/flask-nova/
Comments
Post a Comment