Project description
a.k.a. « Flask on steroids »
An opinionated Flask extension designed by and for web developers to reduce
boilerplate code when working with Marshmallow , MongoDB and/or JSON.
Documentation: https://flask-stupe.readthedocs.io
Features
Return any object type in views, and it will be coerced to a
flask.Response
Validate payloads through Marshmallow schemas
Easily add JSON converters for any custom type
Fetch all the blueprints from a whole module in one line
Native ObjectId support for both Flask and Marshmallow
Powerful configuration management
Decorators to handle authentication, permissions, and pagination
100% coverage and no dependency
Install
$ pip install flask-stupe
Comparison
Here is a comparison of a bare Flask application and its equivalent Stupeflask
version. They both rely on MongoDB , handle input and output in JSON, and allow
to create a user and retrieve one or more.
Bare Flask
With Stupeflask
from bson import ObjectId
from flask import abort , Flask , jsonify , request
from marshmallow import Schema
from marshmallow.fields import String
from pymongo import MongoClient
app = Flask ( __name__ )
users = MongoClient () . database . users
class UserSchema ( Schema ):
username = String ( required = True )
password = String ()
@app . route ( "/user" , methods = [ "POST" ])
def post_user ():
json = request . get_json ( force = True )
validation_result = UserSchema () . load ( json )
if validation_result . errors :
abort ( 400 , validation_result . errors )
result = users . insert_one ( validation_result . data )
inserted_id = str ( result . inserted_id )
validation_result . data . update ( _id = inserted_id )
return jsonify ( validation_result . data )
@app . route ( "/user/<id>" )
def get_user ( id ):
try :
id = ObjectId ( id )
except ValueError :
abort ( 404 )
user = users . find_one ({ "_id" : id })
user [ "_id" ] = str ( user [ "_id" ])
return jsonify ( user )
@app . route ( "/users" )
def get_users ():
limit = request . args . get ( "limit" , 100 , type = int )
skip = request . args . get ( "skip" , 0 , type = int )
cursor = users . find () . limit ( limit ) . skip ( skip )
return jsonify ( list ( cursor ))
from flask import request
from flask_stupe import paginate , schema_required
from flask_stupe.json import Stupeflask
from marshmallow import Schema
from marshmallow.fields import String
from pymongo import MongoClient
app = Stupeflask ( __name__ )
users = MongoClient () . database . users
class UserSchema ( Schema ):
username = String ( required = True )
password = String ()
@app . route ( "/user" , methods = [ "POST" ])
@schema_required ( UserSchema ())
def post_user ():
result = users . insert_one ( request . schema )
request . schema . update ( _id = result . inserted_id )
return request . schema
@app . route ( "/user/<ObjectId:id>" )
def get_user ( id ):
return users . find_one ({ "_id" : id })
@app . route ( "/users" )
@paginate ( limit = 100 )
def get_users ():
return users . find ()
Tests
To run Flask-Stupe tests:
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages .
Source Distribution
File details
Details for the file Flask-Stupe-4.4.0.tar.gz
.
File metadata
Download URL:
Flask-Stupe-4.4.0.tar.gz
Upload date: Jul 18, 2022
Size: 11.9 kB
Tags: Source
Uploaded using Trusted Publishing? No
Uploaded via: twine/4.0.1 CPython/3.10.5
File hashes
Hashes for Flask-Stupe-4.4.0.tar.gz
Algorithm
Hash digest
SHA256
8f0bca4405d4ff105baeb1f7b7ea48765100918d6aaf2e5ff131b1e765db611b
Copy
MD5
85d1215d5811ca59279327451d5028f1
Copy
BLAKE2b-256
144a0142d6fdce926e0a1d41b0a20ef3045c8cf3c81a858577e7cc40fe7acfe4
Copy
See more details on using hashes here.