flask_typed_routes is a Python
library designed to validate Flask
requests effortlessly with Pydantic
.
- Type Safety: Automatically validates request parameters based on type annotations.
- Easy Integration: Simple Flask extension for applying validation to Flask routes.
- Error Handling: Automatically returns meaningful error responses for validation failures.
Note: Flask-based views are not supported.
- Python 3.10+
- Pydantic 2.0+
- Flask
To install flask_typed_routes using pip
, run the following command:
pip install flask_typed_routes
Example of a simple Flask application using flask_typed_routes
:
Create a file posts.py
with:
import flask
import flask_typed_routes as flask_tpr
app = flask.Flask(__name__)
flask_tpr.FlaskTypeRoutes(app)
@app.route('/posts/<user>/')
def read_user_posts(user: str, skip: int = 0, limit: int = 10):
# Parameters not included in the "path" are automatically treated as "query" parameters.
data = {
'user': user,
'skip': skip,
'limit': limit,
}
return flask.jsonify(data)
Run the server with:
flask --app posts run
Data conversion:
Open your browser and go to http://127.0.0.1:5000/posts/myuser/?skip=20 You will see the JSON response as:
{
"limit": 10,
"skip": 20,
"user": "myuser"
}
Data validation:
Open your browser and go to http://127.0.0.1:5000/posts/myuser/?skip=abc
You will see the JSON response with the error details because the skip
parameter is not an integer:
{
"errors": [
{
"input": "abc",
"loc": [
"query",
"skip"
],
"msg": "Input should be a valid integer, unable to parse string as an integer",
"type": "int_parsing",
"url": "https://errors.pydantic.dev/2.9/v/int_parsing"
}
]
}
For more detailed information and usage examples, refer to the project documentation
To contribute to the project, you can run the following commands for testing and documentation:
Install the development dependencies and run the tests:
(env)$ pip install -r requirements-dev.txt # Skip if already installed
(env)$ python -m pytest tests/
(env)$ python -m pytest --cov # Run tests with coverage
To build the documentation locally, use the following commands:
(env)$ pip install -r requirements-doc.txt # Skip if already installed
(env)$ mkdocs serve # Start live-reloading docs server
(env)$ mkdocs build # Build the documentation site
This project is licensed under the MIT license.