Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pslacerda/apistar_pydantic

Better parameters for APIStar (and pydantic support)
https://github.com/pslacerda/apistar_pydantic

Last synced: about 1 month ago
JSON representation

Better parameters for APIStar (and pydantic support)

Awesome Lists containing this project

README

        

apistar-pydantic
################

Better handler parameters for `APIStar `_
(and `pydantic `_ support).

General usage is working as expected but documentation and OpenAPI schema aren't done yet.

.. code-block:: sh

$ pip install apistar-pydantic

Usage
=====

.. code-block:: python

from apistar import App
from pydantic import BaseModel
from apistar_pydantic import (
QueryParam, PathParam, DictBodyData, DictQueryData,
PydanticBodyData as BodyData,
PydanticQueryData as QueryData,
Route, components,
)

#
# Declare models
#

class City(BaseModel):
"""City info"""
name: str
population: int

class Computer(BaseModel):
"""Computer info"""
model: str
price: float

class ComputerCity(City, Computer):
"""A computer in a city"""

#
# Create views
#

def resource_complete(param1: QueryParam[str],
param2: QueryParam[int],
param3: DictBodyData[dict],
param4: DictQueryData[dict]):
return repr(locals())

def resource_query(city: QueryData[City]):
return "%s has %d citizens." % (city.name, city.population)

def resource_body(computer: BodyData[Computer]):
return "%s costs R$ %.2f" % (computer.model, computer.price)

def resource_mixed(city: QueryData[City],
computer: BodyData[Computer]):
return ComputerCity(**city.dict(), **computer.dict())

#
# Start the app
#

app = App(
routes=[
Route('/resource', 'GET', resource_query),
Route('/resource_query', 'GET', resource_query),
Route('/resource_body', 'POST', resource_body),
Route('/resource_mixed', 'POST', resource_mixed),
],
components=[
*components
]
)

if __name__ == '__main__':
app.serve('127.0.0.1', 3000, debug=True)