No project description provided
Project description
Build |
|
---|---|
Docs |
|
Package |
Easily document your Sanic API with Swagger UI, Plus param validation and model serialization.
You can find out more here:
http://sanic-transmute.readthedocs.io/en/latest/
What is sanic-transmute ?
A transmute framework for sanic. This framework provides:
declarative generation of http handler interfaces by parsing function annotations
validation and serialization to and from a variety of content types (e.g. json or yaml).
validation and serialization to and from native python objects, using attrs and schematics.
autodocumentation of all handlers generated this way, via swagger.
Quick Start
Overview:
Find Examples here:
Simple example with schematics model.
from sanic import Sanic, Blueprint
from sanic.response import json
from sanic_transmute import describe, add_route, add_swagger, APIException
from sanic.exceptions import ServerError
from schematics.models import Model
from schematics.types import IntType
class User(Model):
points = IntType()
app = Sanic()
bp = Blueprint("test_blueprints", url_prefix="/blueprint")
@describe(paths="/api/v1/user/{user}/", methods="GET")
async def test_transmute(request, user: str, env: str=None, group: [str]=None):
"""
API Description: Transmute Get. This will show in the swagger page (localhost:8000/api/v1/).
"""
return {
"user": user,
"env": env,
"group": group,
}
@describe(paths="/killme")
async def handle_exception(request) -> User:
"""
API Description: Handle exception. This will show in the swagger page (localhost:8000/api/v1/).
"""
raise ServerError("Something bad happened", status_code=500)
@describe(paths="/api/v1/user/missing")
async def handle_api_exception(request) -> User:
"""
API Description: Handle APIException. This will show in the swagger page (localhost:8000/api/v1/).
"""
raise APIException("Something bad happened", code=404)
@describe(paths="/multiply")
async def get_blueprint_params(request, left: int, right: int) -> str:
"""
API Description: Multiply, left * right. This will show in the swagger page (localhost:8000/api/v1/).
"""
res = left * right
return "{left}*{right}={res}".format(left=left, right=right, res=res)
if __name__ == "__main__":
add_route(app, test_transmute)
add_route(app, handle_exception)
add_route(app, handle_api_exception)
# register blueprints
add_route(bp, get_blueprint_params)
app.blueprint(bp)
# add swagger
add_swagger(app, "/api/v1/swagger.json", "/api/v1/")
app.run(host="0.0.0.0", port=8000)
Simple example with attrs model.
from sanic import Sanic, Blueprint
from sanic.response import json
from sanic_transmute import describe, add_route, add_swagger, APIException
from sanic.exceptions import ServerError
import attr
@attr.s
class User:
points = attr.ib(type=int)
app = Sanic()
bp = Blueprint("test_blueprints", url_prefix="/blueprint")
@describe(paths="/api/v1/user/{user}/", methods="GET")
async def test_transmute_get(request, user: str, env: str=None, group: [str]=None):
"""
API Description: Transmute Get. This will show in the swagger page (localhost:8000/api/v1/).
"""
return {
"user": user,
"env": env,
"group": group,
}
@describe(paths="/api/v1/user/", methods="POST")
async def test_transmute_post(request, user: User) -> User:
"""
API Description: Transmute Post. This will show in the swagger page (localhost:8000/api/v1/).
"""
return user
@describe(paths="/killme")
async def handle_exception(request) -> User:
"""
API Description: Handle exception. This will show in the swagger page (localhost:8000/api/v1/).
"""
raise ServerError("Something bad happened", status_code=500)
@describe(paths="/api/v1/user/missing")
async def handle_api_exception(request) -> User:
"""
API Description: Handle APIException. This will show in the swagger page (localhost:8000/api/v1/).
"""
raise APIException("Something bad happened", code=404)
@describe(paths="/multiply")
async def get_blueprint_params(request, left: int, right: int) -> str:
"""
API Description: Multiply, left * right. This will show in the swagger page (localhost:8000/api/v1/).
"""
res = left * right
return "{left}*{right}={res}".format(left=left, right=right, res=res)
if __name__ == "__main__":
add_route(app, test_transmute_get)
add_route(app, test_transmute_post)
add_route(app, handle_exception)
add_route(app, handle_api_exception)
# register blueprints
add_route(bp, get_blueprint_params)
app.blueprint(bp)
# add swagger
add_swagger(app, "/api/v1/swagger.json", "/api/v1/")
app.run(host="0.0.0.0", port=8000)
Development
Build.
./uranium
Run unit tests.
./uranium test
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file sanic-transmute-0.1.3.tar.gz
.
File metadata
- Download URL: sanic-transmute-0.1.3.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72dfe4a893177a0aa30d8693f18b184cad6e314ad306a86ce62cebf2fcaedd0d |
|
MD5 | 477b62be8f434a93fedf69d08ad2736d |
|
BLAKE2b-256 | 4525be6bde5a4cfee152ae678c062cb74061e0f7a725cc7990d9a27811ae8230 |
File details
Details for the file sanic_transmute-0.1.3-py2.py3-none-any.whl
.
File metadata
- Download URL: sanic_transmute-0.1.3-py2.py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35796f15153da6fbd31bf479b5faeb11c01c7a661ae94e10c8e7d63e336faa46 |
|
MD5 | 9da20cc6f0718f55427fb405a03df6fe |
|
BLAKE2b-256 | 7f0f18327c9bb60f8630267bf5062dc8c3e21031227502a97d009c4fbd0536b0 |