{ "info": { "author": "Guillaume Gelin", "author_email": "ramnes@1000mercis.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. image:: https://raw.githubusercontent.com/numberly/flask-stupe/master/artwork/stupeflask.png\n :target: https://youtu.be/PdaAHMztNVE\n\n|\n\n.. image:: https://img.shields.io/pypi/v/flask-stupe.svg\n :target: https://pypi.python.org/pypi/Flask-Stupe\n.. image:: https://img.shields.io/github/license/numberly/flask-stupe.svg\n :target: https://github.com/numberly/flask-stupe/blob/master/LICENSE\n.. image:: https://img.shields.io/travis/numberly/flask-stupe.svg\n :target: https://travis-ci.org/numberly/flask-stupe\n.. image:: https://img.shields.io/coveralls/numberly/flask-stupe.svg\n :target: https://coveralls.io/github/numberly/flask-stupe\n.. image:: https://readthedocs.org/projects/flask-stupe/badge\n :target: http://flask-stupe.readthedocs.io\n\n|\n\n*a.k.a. \u00ab Flask on steroids \u00bb*\n\nAn opinionated Flask_ extension designed by and for web developers to reduce\nboilerplate code when working with Marshmallow_, MongoDB_ and/or JSON.\n\nDocumentation: https://flask-stupe.readthedocs.io\n\n\nFeatures\n========\n\n* Return any object type in views, and it will be coerced to a\n :code:`flask.Response`\n* Validate payloads through Marshmallow_ schemas\n* Easily add JSON converters for any custom type\n* Fetch all the blueprints from a whole module in one line\n* Native ObjectId support for both Flask_ and Marshmallow_\n* Powerful configuration management\n* Decorators to handle authentication, permissions, and pagination\n* 100% coverage and no dependency\n\n\nInstall\n=======\n\n.. code-block:: sh\n\n $ pip install flask-stupe\n\n\nComparison\n==========\n\nHere is a comparison of a bare Flask_ application and its equivalent Stupeflask\nversion. They both rely on MongoDB_, handle input and output in JSON, and allow\nto create a user and retrieve one or more.\n\n+--------------------------------------------------------+-----------------------------------------------------+\n| **Bare Flask** | **With Stupeflask** |\n+--------------------------------------------------------+-----------------------------------------------------+\n|.. code-block:: python |.. code-block:: python |\n| | |\n| from bson import ObjectId | from flask import request |\n| from flask import abort, Flask, jsonify, request | from flask_stupe import paginate, schema_required |\n| from marshmallow import Schema | from flask_stupe.json import Stupeflask |\n| from marshmallow.fields import String | from marshmallow import Schema |\n| from pymongo import MongoClient | from marshmallow.fields import String |\n| | from pymongo import MongoClient |\n| app = Flask(__name__) | |\n| users = MongoClient().database.users | app = Stupeflask(__name__) |\n| | users = MongoClient().database.users |\n| | |\n| class UserSchema(Schema): | |\n| username = String(required=True) | class UserSchema(Schema): |\n| password = String() | username = String(required=True) |\n| | password = String() |\n| | |\n| @app.route(\"/user\", methods=[\"POST\"]) | |\n| def post_user(): | @app.route(\"/user\", methods=[\"POST\"]) |\n| json = request.get_json(force=True) | @schema_required(UserSchema()) |\n| validation_result = UserSchema().load(json) | def post_user(): |\n| if validation_result.errors: | result = users.insert_one(request.schema) |\n| abort(400, validation_result.errors) | request.schema.update(_id=result.inserted_id) |\n| result = users.insert_one(validation_result.data) | return request.schema |\n| inserted_id = str(result.inserted_id) | |\n| validation_result.data.update(_id=inserted_id) | |\n| return jsonify(validation_result.data) | @app.route(\"/user/\") |\n| | def get_user(id): |\n| | return users.find_one({\"_id\": id}) |\n| @app.route(\"/user/\") | |\n| def get_user(id): | |\n| try: | @app.route(\"/users\") |\n| id = ObjectId(id) | @paginate(limit=100) |\n| except ValueError: | def get_users(): |\n| abort(404) | return users.find() |\n| user = users.find_one({\"_id\": id}) | |\n| user[\"_id\"] = str(user[\"_id\"]) | |\n| return jsonify(user) | |\n| | |\n| | |\n| @app.route(\"/users\") | |\n| def get_users(): | |\n| limit = request.args.get(\"limit\", 100, type=int) | |\n| skip = request.args.get(\"skip\", 0, type=int) | |\n| cursor = users.find().limit(limit).skip(skip) | |\n| return jsonify(list(cursor)) | |\n+--------------------------------------------------------+-----------------------------------------------------+\n\n\nTests\n=====\n\nTo run Flask-Stupe tests:\n\n* install developers requirements with ``pip install -r requirements.txt``;\n* run ``pytest``.\n\n\nLicense\n=======\n\nMIT\n\n\n.. _Flask: http://flask.pocoo.org/\n.. _Marshmallow: https://marshmallow.readthedocs.io/en/latest/\n.. _MongoDB: https://www.mongodb.com/\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/numberly/flask-stupe", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Flask-Stupe", "package_url": "https://pypi.org/project/Flask-Stupe/", "platform": "any", "project_url": "https://pypi.org/project/Flask-Stupe/", "project_urls": { "Homepage": "https://github.com/numberly/flask-stupe" }, "release_url": "https://pypi.org/project/Flask-Stupe/4.1.2/", "requires_dist": null, "requires_python": "", "summary": "a.k.a. \u00ab Flask on steroids \u00bb", "version": "4.1.2" }, "last_serial": 5761085, "releases": { "3.5.0": [ { "comment_text": "", "digests": { "md5": "588c59f20e2405f6f2a0b4290b112c8f", "sha256": "35c540c5c0c48678ffecc11f35c13a962048709479199cf80c6bb3e85cfe9f03" }, "downloads": -1, "filename": "Flask_Stupe-3.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "588c59f20e2405f6f2a0b4290b112c8f", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 4956, "upload_time": "2018-03-23T10:36:06", "url": "https://files.pythonhosted.org/packages/e7/cf/0b18daaa045e2d697b396aa8549638984b7f547ce49f99c2612dfd609ce2/Flask_Stupe-3.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "311b7e68f785d6a28b31a5b0810f103b", "sha256": "2a158ed5d4e132ad1d3719eeaf965e1757452edf9b0117913b9ae9112f0ce518" }, "downloads": -1, "filename": "Flask-Stupe-3.5.0.tar.gz", "has_sig": false, "md5_digest": "311b7e68f785d6a28b31a5b0810f103b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3178, "upload_time": "2018-03-23T10:36:08", "url": "https://files.pythonhosted.org/packages/a8/81/03cf35a68bb76cda9bec84fa93efa67f00ba911fefb3af11daa76f51cdbc/Flask-Stupe-3.5.0.tar.gz" } ], "3.5.1": [ { "comment_text": "", "digests": { "md5": "6d84fe680681c1d4a3f8137181bf20da", "sha256": "3e9d783b3178cad64ec7de0414067c130ab92462db322d5f5b0872a8cdf4f837" }, "downloads": -1, "filename": "Flask_Stupe-3.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d84fe680681c1d4a3f8137181bf20da", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 4985, "upload_time": "2018-03-23T10:43:57", "url": "https://files.pythonhosted.org/packages/31/2a/67e058b412a94ddec503492684e00552fd9d71e009ece714336d0e529df0/Flask_Stupe-3.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5ff9d6c4617f9305c6800ea790a183d", "sha256": "4292edc2d6e628c9d79075209f3a5ab8a594c5f4fe18d6a581619e3044fbaa87" }, "downloads": -1, "filename": "Flask-Stupe-3.5.1.tar.gz", "has_sig": false, "md5_digest": "b5ff9d6c4617f9305c6800ea790a183d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3174, "upload_time": "2018-03-23T10:43:59", "url": "https://files.pythonhosted.org/packages/9f/a1/0c1e967e3ed2d5f0985c6b7e3e19680a0caef6dfb5afd613f86e7ff0c093/Flask-Stupe-3.5.1.tar.gz" } ], "3.5.2": [ { "comment_text": "", "digests": { "md5": "0352800047fece539a498c4b8b1efda8", "sha256": "163c7c63e5291d297e3af85495cdcfa51b9d425f9e973f08f95acc2969f303bc" }, "downloads": -1, "filename": "Flask_Stupe-3.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0352800047fece539a498c4b8b1efda8", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 5104, "upload_time": "2018-04-03T12:32:20", "url": "https://files.pythonhosted.org/packages/04/77/0982bba167a1ce54473815d7b549ec4a89c22df82065dcfae37fa7787135/Flask_Stupe-3.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67b05bfb7d429b3bb0edbaee2a2f8d63", "sha256": "60c4a9e135b290552f9d5cbc20a4173610a42b6be2017af7c050a224ec09eb61" }, "downloads": -1, "filename": "Flask-Stupe-3.5.2.tar.gz", "has_sig": false, "md5_digest": "67b05bfb7d429b3bb0edbaee2a2f8d63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3247, "upload_time": "2018-04-03T12:32:21", "url": "https://files.pythonhosted.org/packages/bd/73/dae6a5b65b4a18bfe9f7aef6f7e11ff0cc434a3ca4fa9e46a1cd09488349/Flask-Stupe-3.5.2.tar.gz" } ], "3.6.0": [ { "comment_text": "", "digests": { "md5": "809c0b9bf37c3b7a95e86095904038b9", "sha256": "10dc3cc264faf3999b00afa27ac82c0433bf21054dc08aa879651eef7e927528" }, "downloads": -1, "filename": "Flask_Stupe-3.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "809c0b9bf37c3b7a95e86095904038b9", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 12680, "upload_time": "2018-04-09T13:56:16", "url": "https://files.pythonhosted.org/packages/b1/c4/4cb3363b0e5577fcce4eb74081009814e289586949e8168e78b2e9b726d0/Flask_Stupe-3.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fdbb2bc302a5cc9104d39929db8c2556", "sha256": "c21d3afdfb8547024f7c8506362377327b7d8ed4d6942b7cf97a6e30694de459" }, "downloads": -1, "filename": "Flask-Stupe-3.6.0.tar.gz", "has_sig": false, "md5_digest": "fdbb2bc302a5cc9104d39929db8c2556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11556, "upload_time": "2018-04-09T13:56:15", "url": "https://files.pythonhosted.org/packages/44/cc/e1f2c0c202214d0b53a8218e48e2dc8485b7eb5ec7be1242d48757c7a706/Flask-Stupe-3.6.0.tar.gz" } ], "3.6.1": [ { "comment_text": "", "digests": { "md5": "989fb078bfe807f00ea8a121dd8397b4", "sha256": "cb2c32ebbefd1a57f09867e7c74b6a77c2ad2d5a3778e41a14434d62eda9fbb9" }, "downloads": -1, "filename": "Flask-Stupe-3.6.1.tar.gz", "has_sig": false, "md5_digest": "989fb078bfe807f00ea8a121dd8397b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 181060, "upload_time": "2018-04-11T10:49:25", "url": "https://files.pythonhosted.org/packages/a5/9c/38e3ea38f642fb7aa01f800271a017e9208abecb9409f55390504a1fa57c/Flask-Stupe-3.6.1.tar.gz" } ], "3.6.2": [ { "comment_text": "", "digests": { "md5": "972a952c892eec5ea801827186b6dae9", "sha256": "a07cd13b5b823eb1e910b0a10c82b230a682f7d8a70a96333edddf94b7430a0c" }, "downloads": -1, "filename": "Flask-Stupe-3.6.2.tar.gz", "has_sig": false, "md5_digest": "972a952c892eec5ea801827186b6dae9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 181070, "upload_time": "2018-04-11T10:58:18", "url": "https://files.pythonhosted.org/packages/72/57/a664be4221972599896de0cceb802fc4914d46ea90377bdaef985d75deaf/Flask-Stupe-3.6.2.tar.gz" } ], "3.6.3": [ { "comment_text": "", "digests": { "md5": "6ccb7eae791573a13f427fca5516cf17", "sha256": "132a6c9b75df5c0b0fe7ecc6537354c7b6d14f2118bf9b419f422bc37ce3eb5a" }, "downloads": -1, "filename": "Flask_Stupe-3.6.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6ccb7eae791573a13f427fca5516cf17", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 12883, "upload_time": "2018-04-24T10:08:16", "url": "https://files.pythonhosted.org/packages/79/8d/504c68b05c3c8160ca0cf174c976ed1e86bb192b25adeff6dd3e44c091a8/Flask_Stupe-3.6.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38b7403efc94402565071e6d71206f28", "sha256": "6397185a4b9f3a06b7c5f7feaa16a0592a732d367152a11e979710e1a7230253" }, "downloads": -1, "filename": "Flask-Stupe-3.6.3.tar.gz", "has_sig": false, "md5_digest": "38b7403efc94402565071e6d71206f28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11806, "upload_time": "2018-04-24T10:08:18", "url": "https://files.pythonhosted.org/packages/62/6c/9f2ebfd9c4b231dc103f49644ecb9e0686f8f09a178548e962ccfa484bf1/Flask-Stupe-3.6.3.tar.gz" } ], "3.6.4": [ { "comment_text": "", "digests": { "md5": "a127b356806fe28d3df5a3c548ad9a2c", "sha256": "b955f6acb690a44e7c63a4182ddf7e181f1ad0a39e80453c862b5100395b155a" }, "downloads": -1, "filename": "Flask_Stupe-3.6.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a127b356806fe28d3df5a3c548ad9a2c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 15425, "upload_time": "2018-04-24T14:07:17", "url": "https://files.pythonhosted.org/packages/b8/94/434bfb703c5648a8fa7275c8513d2ca19c218f4b3ec1457cc7481ad22fc0/Flask_Stupe-3.6.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "767fc2523c22762372b69ed64632728c", "sha256": "ad766819788be8eb66ffc359790413eea5ad35cad062a0cf345e3b8e59afe620" }, "downloads": -1, "filename": "Flask-Stupe-3.6.4.tar.gz", "has_sig": false, "md5_digest": "767fc2523c22762372b69ed64632728c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11920, "upload_time": "2018-04-24T14:07:18", "url": "https://files.pythonhosted.org/packages/e8/30/5adcf944e82ab4cfd978a4e6cbe0f70fc659e8669077261beec9bfd10433/Flask-Stupe-3.6.4.tar.gz" } ], "3.7.0": [ { "comment_text": "", "digests": { "md5": "7521e4cc81ca8e6b391a39812dc58e89", "sha256": "5989fa0f25717fa377fe8ddca004f59617c09811d0933c68539f21e585d0ebfb" }, "downloads": -1, "filename": "Flask-Stupe-3.7.0.tar.gz", "has_sig": false, "md5_digest": "7521e4cc81ca8e6b391a39812dc58e89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11995, "upload_time": "2018-08-30T16:00:51", "url": "https://files.pythonhosted.org/packages/62/de/0abb2484a4de3d63a13451c98cab48eedead98497cf6fc7aa9fd9f9207e0/Flask-Stupe-3.7.0.tar.gz" } ], "3.7.1": [ { "comment_text": "", "digests": { "md5": "f432ce3f2b55ba3fc1d1f2b4aac509d4", "sha256": "0817ec7af436bc13caae1bc59f109614ee751e9ff5fce73418e4e2a253025fd4" }, "downloads": -1, "filename": "Flask-Stupe-3.7.1.tar.gz", "has_sig": false, "md5_digest": "f432ce3f2b55ba3fc1d1f2b4aac509d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 181346, "upload_time": "2018-10-11T13:56:50", "url": "https://files.pythonhosted.org/packages/0b/96/3c2bd93a53671f76bcb0117479bd618d62a59793aa5e10cbabcb19ea02e9/Flask-Stupe-3.7.1.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "47b524faa57b7148e7791c07d8f635a0", "sha256": "febc744f5446ba96c10d26922ab02ab3ff8446a96540ebc4f652a3ea7b3d3c2c" }, "downloads": -1, "filename": "Flask-Stupe-4.0.0.tar.gz", "has_sig": false, "md5_digest": "47b524faa57b7148e7791c07d8f635a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10592, "upload_time": "2019-08-21T10:09:24", "url": "https://files.pythonhosted.org/packages/60/24/9474dbd291b7f4dd10dc4705a91454337aee9de3a90b03ee92fc2e9a4ed2/Flask-Stupe-4.0.0.tar.gz" } ], "4.1.2": [ { "comment_text": "", "digests": { "md5": "10c2c1c40ad73fb2a3cff1e72ce60024", "sha256": "eea3f6a754c59bbf0d30426e0dc08d11c3c73c139136fb46a0262dc3c4063976" }, "downloads": -1, "filename": "Flask_Stupe-4.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "10c2c1c40ad73fb2a3cff1e72ce60024", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14024, "upload_time": "2019-08-30T16:16:57", "url": "https://files.pythonhosted.org/packages/d3/76/b65e12212fb9d72c5508b769ec9eb2edd4c1f3caa82b7b6af9fcfa903dcc/Flask_Stupe-4.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "435933743761fa984c6ac60b20d7bd9b", "sha256": "c7d88fa5fdda5b09ab63692d415e9e0b799ef858edfd646ed2442b57e1b92eec" }, "downloads": -1, "filename": "Flask-Stupe-4.1.2.tar.gz", "has_sig": false, "md5_digest": "435933743761fa984c6ac60b20d7bd9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10744, "upload_time": "2019-08-30T16:16:55", "url": "https://files.pythonhosted.org/packages/8b/28/e1c1cf2cb3930c8531d6f385d1027ca2dfda85e735275436b42211d67a2b/Flask-Stupe-4.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "10c2c1c40ad73fb2a3cff1e72ce60024", "sha256": "eea3f6a754c59bbf0d30426e0dc08d11c3c73c139136fb46a0262dc3c4063976" }, "downloads": -1, "filename": "Flask_Stupe-4.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "10c2c1c40ad73fb2a3cff1e72ce60024", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14024, "upload_time": "2019-08-30T16:16:57", "url": "https://files.pythonhosted.org/packages/d3/76/b65e12212fb9d72c5508b769ec9eb2edd4c1f3caa82b7b6af9fcfa903dcc/Flask_Stupe-4.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "435933743761fa984c6ac60b20d7bd9b", "sha256": "c7d88fa5fdda5b09ab63692d415e9e0b799ef858edfd646ed2442b57e1b92eec" }, "downloads": -1, "filename": "Flask-Stupe-4.1.2.tar.gz", "has_sig": false, "md5_digest": "435933743761fa984c6ac60b20d7bd9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10744, "upload_time": "2019-08-30T16:16:55", "url": "https://files.pythonhosted.org/packages/8b/28/e1c1cf2cb3930c8531d6f385d1027ca2dfda85e735275436b42211d67a2b/Flask-Stupe-4.1.2.tar.gz" } ] }