Marshmallow API Utilities
Project description
Marshmallow API Utilities
A collection of tools for REST API development with Marshmallow.
Package | |
Meta |
Basic usage
from datetime import date
from flask import Flask
from flask_smorest import Api
from marshmallow_dataclass import dataclass as ma_dataclass
from sqlalchemy import Column, Select, select
from sqlalchemy.orm import DeclarativeBase
from marshmallow_api_utils.fields import dump_only_field, optional_field, required_field
from marshmallow_api_utils.ma_dataclass import MaDataclass
from marshmallow_api_utils.models.sortable import Sortable
class Base(DeclarativeBase):
pass
class Pet(Base):
__tablename__ = 'pets'
id = Column(st.Integer, primary_key=True)
name = Column(st.String)
birthdate = Column(st.Date)
@ma_dataclass
class PetDTO(MaDataclass):
id: int = dump_only_field()
name: str = required_field(help='This will show up in the OpenAPI docs.')
birthdate: dt.date = optional_field()
age: int = dump_only_field(sortable=False)
@ma.pre_dump
def add_age(self, data, many, **kwargs):
data['age'] = int((date.today() - data.birthdate) / 365.25)
return data
@ma_dataclass
class PetQueryParams(Sortable, MaDataclass):
class Meta:
dto_schema = PetDTO.Schema()
flask = Flask(__name__)
app.config["API_TITLE"] = "My API"
app.config["API_VERSION"] = "v1"
app.config["OPENAPI_VERSION"] = "3.0.2"
api = Api(app)
blp = Blueprint("pets", "pets", url_prefix="/pets", description="Operations on pets")
@blp.route("/")
class Pets(MethodView):
@blp.arguments(PetQueryParams.Schema, location="query")
@blp.response(200, Pet.Schema(many=True))
def get(self, query_params: PetQueryParams):
"""List pets"""
stmt = select(Pet)
stmt = query_params.apply_sort(stmt)
return stmt.all()
License
Marshmallow API Utilities is distributed under the terms of the MIT license.
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
Built Distribution
Close
Hashes for marshmallow_api_utils-0.2.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06d66eefad265f8f7063696e26553a5a2b247a54812972537533801ad1fed3da |
|
MD5 | 717bb31d1ba44a061ef25f2c3e25d6b5 |
|
BLAKE2b-256 | 2004a5ddd8e32c2b279632ae9606ae39bc23c5491b24181c0c7b507eb4dbdc90 |
Close
Hashes for marshmallow_api_utils-0.2.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c10e5f4130da7a0f10c377f5e0564e7be0aee7caed13e46de5faf98f9e8ffd0 |
|
MD5 | 96b91d7ae2f731b2c38b67b1f00325de |
|
BLAKE2b-256 | 325faff96f8ddf02b0b86ca7f49a629eac6086806cc3850d4bb8905588f28a3c |