Skip to main content

Powerful REST API framework for Flask and SQLAlchemy

Project description

https://img.shields.io/travis/biosustain/potion/master.svg?style=flat-square https://img.shields.io/coveralls/biosustain/potion/master.svg?style=flat-square https://img.shields.io/pypi/v/Flask-Potion.svg?style=flat-square https://img.shields.io/pypi/l/Flask-Potion.svg?style=flat-square

Flask-Potion

Description

Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resources and routes, relations, object permissions, filtering, sorting, pagination, signals, and automatic API schema generation.

Potion is designed to handle SQLAlchemy, peewee and MongoEngine models. It is possible to add backends for other data stores, or even to use a subset of Potion without any data store at all.

User’s Guide

The user’s guide and documentation is published here:

http://potion.readthedocs.org/

Versioning

Potion will use semantic versioning from v1.0.0. Until then, the minor version is used for changes known to be breaking.

Features

  • Powerful API framework both for data-store-linked and plain resources

  • JSON-based and fully self-documenting with JSON Hyper-Schema

  • Backend integrations:

    • Flask-SQLAlchemy

    • Peewee (contributed by Michael Lavers)

    • Flask-MongoEngine

  • Filtering, sorting, pagination, validation, built right in

  • Smart system for handling relations between resources

  • Natural keys for extra simple relation querying

  • Easy-to-use, yet highly flexible, optional permissions system

  • Signals for pre- and post-processing of requests

  • Very customizable — everything is just a resource, route, or schema

Example (SQLAlchemy)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_potion import Api, ModelResource, fields
from flask_potion.routes import ItemRoute

app = Flask(__name__)
db = SQLAlchemy(app)
api = Api(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(), nullable=False)

db.create_all()

class UserResource(ModelResource):
    class Meta:
        model = User

    @ItemRoute.GET
    def greeting(self, user) -> fields.String():
        return "Hello, {}!".format(user.name)

api.add_resource(UserResource)

if __name__ == '__main__':
    app.run()

Long-term goals

The web nowadays is increasingly push rather than pull, so Potion is gradually building up to providing a scalable WebSocket service (using asyncio and a message queue). This service will mirror the RESTful API so that every GET request can be done “live”. (In the meantime, you can use the signals module to roll your own solution).

Potion is written in a way that makes it very easy to cache resources. A natural goal is to eventually ship Potion with a built-in server-side caching solution.

Authors

Potion is written and maintained by Lars Schöning.

Peewee backend support has been contributed by Michael Lavers.

MongoEngine backend support has been contributed by João Cardoso.

See here for the full list of contributors.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Flask-Potion-0.10.0.tar.gz (35.1 kB view details)

Uploaded Source

File details

Details for the file Flask-Potion-0.10.0.tar.gz.

File metadata

  • Download URL: Flask-Potion-0.10.0.tar.gz
  • Upload date:
  • Size: 35.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Flask-Potion-0.10.0.tar.gz
Algorithm Hash digest
SHA256 2c972de20bdc2921a93fe29ab78af3d12d866d3d166a52aa8536d9b6b00a5a3d
MD5 6eb275fe20afdd7d4ecaad54eaf0f8c4
BLAKE2b-256 045b20a20344e29a9f8f805b8914e9b963edba466e8452571380a9b7b57741d6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page