Introducing Flask-Nova: Zero-Boilerplate APIs with Docs & Type Safety

Flask-Nova

๐Ÿš€ 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.

๐Ÿ”ฅ 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

๐Ÿ™ 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

Popular posts from this blog

Beginner-Friendly Introduction to Git & GitHub