dtiesling / flask-muck

🧹 Flask REST framework for generating CRUD APIs and OpenAPI specs in the SQLAlchemy, Marshmallow/Pydantic application stack.

Home Page:https://dtiesling.github.io/flask-muck/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Code style: black CI Testing CodeQL Docs Deploy types - Mypy Static Badge License - MIT downloads pypi version All Contributors

Flask-Muck

Logo

With Flask-Muck you don't have to worry about the CRUD.

Flask-Muck is a batteries-included declarative framework for automatically generating RESTful APIs with Create, Read, Update and Delete (CRUD) endpoints in a Flask/SqlAlchemy application stack in as little as 9 lines of code.

from flask import Blueprint
from flask_muck.views import FlaskMuckApiView
import marshmallow as ma
from marshmallow import fields as mf

from myapp import db


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


class MyModelSchema(ma.Schema):
    id = mf.Integer(dump_only=True)
    name = mf.String()


class MyModelApiView(FlaskMuckApiView):
    api_name = "my-model"
    session = db.session
    Model = MyModel
    ResponseSchema = MyModelSchema
    CreateSchema = MyModelSchema
    PatchSchema = MyModelSchema
    UpdateSchema = MyModelSchema
    searchable_columns = [MyModel.name]


blueprint = Blueprint("api", __name__, url_prefix="/api/")
MyModelApiView.add_rules_to_blueprint(blueprint)

# Available Endpoints:
# CREATE             | curl -X POST "/api/v1/my-model" -H "Content-Type: application/json" \-d "{\"name\": \"Ayla\"}"
# LIST ALL           | curl -X GET "/api/v1/my-model" -d "Accept: application/json"
# LIST ALL PAGINATED | curl -X GET "/api/v1/my-model?limit=100&offset=50" -d "Accept: application/json"
# SEARCH             | curl -X GET "/api/v1/my-model?search=ayla" -d "Accept: application/json"
# FILTER             | curl -X GET "/api/v1/my-model?filter={\"name\": \"Ayla\"}" -d "Accept: application/json"
# SORT               | curl -X GET "/api/v1/my-model?sort=name" -d "Accept: application/json"
# FETCH              | curl -X GET "/api/v1/my-model/1" -d "Accept: application/json"
# UPDATE             | curl -X PUT "/api/v1/my-model" -H "Content-Type: application/json" \-d "{\"name\": \"Ayla\"}"
# PATCH              | curl -X PATCH "/api/v1/my-model" -H "Content-Type: application/json" \-d "{\"name\": \"Ayla\"}"
# DELETE             | curl -X DELETE "/api/v1/my-model/1"

Features

  • Uses a declarative and modular approach to automatically generate CRUD endpoints.
  • Built-in search, filter, sort and pagination when listing resources.
  • Support for APIs with nested resources (i.e. /api/classrooms/12345/students).
  • Fully compatible with any other Flask method-based or class-based views. Mix & match with your existing views.
  • Pre and post callbacks configurable on all manipulation endpoints. Allow for adding arbitrary logic before and after Create, Update or Delete operations.
  • Supports Marshmallow and Pydantic for schema definitions.

Documentation

Please visit the docs at https://dtiesling.github.io/flask-muck/ for explanation of all features and advanced usage guides.

There are also examples of complete Flask apps using Flask-Muck in the examples directory.

Install

Flask-Muck is in Beta and does not have a standard version available for install yet. A standard release on PyPi is coming soon.

pip install flask-muck

Flask-Muck supports Python >= 3.9

Bug Reports

Submit any issues you may encounter as a GitHub issue. Please search for similar issues before submitting a new one.

Questions, Concerns, Ideas, Support, Feature Requests

All non-bug-related discussions such as support or feature requests should be submitted as a GitHub Discussion.

License

MIT licensed. See the LICENSE file for more details.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

atkins
atkins

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

Support

Thanks for the stars! They mean nothing but bring me immense satisfaction. Keep 'em coming.

Star History Chart

About

🧹 Flask REST framework for generating CRUD APIs and OpenAPI specs in the SQLAlchemy, Marshmallow/Pydantic application stack.

https://dtiesling.github.io/flask-muck/

License:MIT License


Languages

Language:Python 100.0%