{ "info": { "author": "Yun Xu", "author_email": "yunxu1992@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: System :: Software Distribution" ], "description": "sanic-transmute\n==================\n\n.. start-badges\n\n.. list-table::\n :stub-columns: 1\n\n * - Build\n - | |travis| |coverage|\n * - Docs\n - |docs|\n * - Package\n - | |version| |wheel| |supported-versions| |supported-implementations|\n\n.. |travis| image:: https://travis-ci.org/yunstanford/sanic-transmute.svg?branch=master\n :alt: Travis-CI Build Status\n :target: https://travis-ci.org/yunstanford/sanic-transmute\n\n.. |coverage| image:: https://coveralls.io/repos/github/yunstanford/sanic-transmute/badge.svg?branch=master\n :alt: coverage status\n :target: https://coveralls.io/github/yunstanford/sanic-transmute?branch=master\n\n.. |docs| image:: https://readthedocs.org/projects/sanic-transmute/badge/?style=flat\n :target: https://readthedocs.org/projects/sanic-transmute\n :alt: Documentation Status\n\n.. |version| image:: https://img.shields.io/pypi/v/sanic-transmute.svg\n :alt: PyPI Package latest release\n :target: https://pypi.python.org/pypi/sanic-transmute\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/sanic-transmute.svg\n :alt: PyPI Wheel\n :target: https://pypi.python.org/pypi/sanic-transmute\n\n.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/sanic-transmute.svg\n :alt: Supported versions\n :target: https://pypi.python.org/pypi/sanic-transmute\n\n.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/sanic-transmute.svg\n :alt: Supported implementations\n :target: https://pypi.python.org/pypi/sanic-transmute\n\n.. end-badges\n\nEasily document your Sanic API with Swagger UI, Plus param validation and model serialization.\n\nYou can find out more here:\n\nhttp://sanic-transmute.readthedocs.io/en/latest/\n\n\n-------------------------\nWhat is sanic-transmute ?\n-------------------------\n\nA `transmute\n`_\nframework for `sanic `_. This\nframework provides:\n\n* declarative generation of http handler interfaces by parsing function annotations\n* validation and serialization to and from a variety of content types (e.g. json or yaml).\n* validation and serialization to and from native python objects, using `attrs `_ and `schematics `_.\n* autodocumentation of all handlers generated this way, via `swagger `_.\n\n\n-----------\nQuick Start\n-----------\n\nOverview:\n\n.. figure:: ./examples/code-to-ui.png\n :align: center\n :alt: code-to-ui.png\n\n\nFind Examples here:\n\n* `example with attrs model `_.\n* `example with schematic model `_.\n\nSimple example with schematics model.\n\n.. code-block:: python\n\n from sanic import Sanic, Blueprint\n from sanic.response import json\n from sanic_transmute import describe, add_route, add_swagger, APIException\n from sanic.exceptions import ServerError\n from schematics.models import Model\n from schematics.types import IntType\n\n\n class User(Model):\n points = IntType()\n\n\n app = Sanic()\n bp = Blueprint(\"test_blueprints\", url_prefix=\"/blueprint\")\n\n\n @describe(paths=\"/api/v1/user/{user}/\", methods=\"GET\")\n async def test_transmute(request, user: str, env: str=None, group: [str]=None):\n \"\"\"\n API Description: Transmute Get. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n return {\n \"user\": user,\n \"env\": env,\n \"group\": group,\n }\n\n\n @describe(paths=\"/killme\")\n async def handle_exception(request) -> User:\n \"\"\"\n API Description: Handle exception. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n raise ServerError(\"Something bad happened\", status_code=500)\n\n\n @describe(paths=\"/api/v1/user/missing\")\n async def handle_api_exception(request) -> User:\n \"\"\"\n API Description: Handle APIException. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n raise APIException(\"Something bad happened\", code=404)\n\n\n @describe(paths=\"/multiply\")\n async def get_blueprint_params(request, left: int, right: int) -> str:\n \"\"\"\n API Description: Multiply, left * right. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n res = left * right\n return \"{left}*{right}={res}\".format(left=left, right=right, res=res)\n\n\n if __name__ == \"__main__\":\n add_route(app, test_transmute)\n add_route(app, handle_exception)\n add_route(app, handle_api_exception)\n # register blueprints\n add_route(bp, get_blueprint_params)\n app.blueprint(bp)\n # add swagger\n add_swagger(app, \"/api/v1/swagger.json\", \"/api/v1/\")\n app.run(host=\"0.0.0.0\", port=8000)\n\nSimple example with attrs model.\n\n.. code-block:: python\n\n from sanic import Sanic, Blueprint\n from sanic.response import json\n from sanic_transmute import describe, add_route, add_swagger, APIException\n from sanic.exceptions import ServerError\n import attr\n\n\n @attr.s\n class User:\n points = attr.ib(type=int)\n\n\n app = Sanic()\n bp = Blueprint(\"test_blueprints\", url_prefix=\"/blueprint\")\n\n\n @describe(paths=\"/api/v1/user/{user}/\", methods=\"GET\")\n async def test_transmute_get(request, user: str, env: str=None, group: [str]=None):\n \"\"\"\n API Description: Transmute Get. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n return {\n \"user\": user,\n \"env\": env,\n \"group\": group,\n }\n\n\n @describe(paths=\"/api/v1/user/\", methods=\"POST\")\n async def test_transmute_post(request, user: User) -> User:\n \"\"\"\n API Description: Transmute Post. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n return user\n\n\n @describe(paths=\"/killme\")\n async def handle_exception(request) -> User:\n \"\"\"\n API Description: Handle exception. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n raise ServerError(\"Something bad happened\", status_code=500)\n\n\n @describe(paths=\"/api/v1/user/missing\")\n async def handle_api_exception(request) -> User:\n \"\"\"\n API Description: Handle APIException. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n raise APIException(\"Something bad happened\", code=404)\n\n\n @describe(paths=\"/multiply\")\n async def get_blueprint_params(request, left: int, right: int) -> str:\n \"\"\"\n API Description: Multiply, left * right. This will show in the swagger page (localhost:8000/api/v1/).\n \"\"\"\n res = left * right\n return \"{left}*{right}={res}\".format(left=left, right=right, res=res)\n\n\n if __name__ == \"__main__\":\n add_route(app, test_transmute_get)\n add_route(app, test_transmute_post)\n add_route(app, handle_exception)\n add_route(app, handle_api_exception)\n # register blueprints\n add_route(bp, get_blueprint_params)\n app.blueprint(bp)\n # add swagger\n add_swagger(app, \"/api/v1/swagger.json\", \"/api/v1/\")\n app.run(host=\"0.0.0.0\", port=8000)\n\n\n-----------\nDevelopment\n-----------\n\nBuild.\n\n.. code::\n\n ./uranium\n\n\nRun unit tests.\n\n.. code::\n\n ./uranium test\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yunstanford/sanic-transmute/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "sanic-transmute", "package_url": "https://pypi.org/project/sanic-transmute/", "platform": "", "project_url": "https://pypi.org/project/sanic-transmute/", "project_urls": { "Homepage": "https://github.com/yunstanford/sanic-transmute/" }, "release_url": "https://pypi.org/project/sanic-transmute/0.1.3/", "requires_dist": null, "requires_python": "", "summary": "", "version": "0.1.3" }, "last_serial": 4513181, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "5a88a794d976e7fb78ccc5af2372cdaa", "sha256": "55ebd32629f9b1cb31fedf80d384fdaaa731a371813d121704b7d83d30ca2ba8" }, "downloads": -1, "filename": "sanic_transmute-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5a88a794d976e7fb78ccc5af2372cdaa", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 8677, "upload_time": "2017-06-06T04:49:56", "url": "https://files.pythonhosted.org/packages/a1/f1/929732ee463e8835cf80bcfc78001718af368c86f5f4260001e6b2917f5a/sanic_transmute-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "026edff81e8a17f631c384088b5bfd6e", "sha256": "7a8de261e45fea1626629213922d068f9ffc0259ff29ad9ff472bbd11aeabc05" }, "downloads": -1, "filename": "sanic-transmute-0.1.1.tar.gz", "has_sig": false, "md5_digest": "026edff81e8a17f631c384088b5bfd6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5101, "upload_time": "2017-06-06T04:49:54", "url": "https://files.pythonhosted.org/packages/7f/bc/d59fe4d2d198474c08365f619e6fcfa46520c8d25944e63f65a4ee5bb4fe/sanic-transmute-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "5d40bb724ef5eae9fbc264308b5c372e", "sha256": "ff7850980847c346450f2f23881360bc6118257418aa91e6e325bf9e8a8ae218" }, "downloads": -1, "filename": "sanic_transmute-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d40bb724ef5eae9fbc264308b5c372e", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10385, "upload_time": "2017-07-19T00:19:43", "url": "https://files.pythonhosted.org/packages/00/38/18f82a89ec52531ffbd6e18595b66c08f948845f9bd8309276475773c6de/sanic_transmute-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c1b344c595a799ecec1dcbaf92fbeab", "sha256": "a3973fc8505062119def2bf740a317104444928c2b00367498de8fa314f8b9c0" }, "downloads": -1, "filename": "sanic-transmute-0.1.2.tar.gz", "has_sig": false, "md5_digest": "8c1b344c595a799ecec1dcbaf92fbeab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5846, "upload_time": "2017-07-19T00:19:41", "url": "https://files.pythonhosted.org/packages/c4/75/75ef596587955a8fd038250b474fd06efb0cab7cae13018f143ca363ad74/sanic-transmute-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "9da20cc6f0718f55427fb405a03df6fe", "sha256": "35796f15153da6fbd31bf479b5faeb11c01c7a661ae94e10c8e7d63e336faa46" }, "downloads": -1, "filename": "sanic_transmute-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9da20cc6f0718f55427fb405a03df6fe", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9797, "upload_time": "2018-11-21T15:55:06", "url": "https://files.pythonhosted.org/packages/7f/0f/18327c9bb60f8630267bf5062dc8c3e21031227502a97d009c4fbd0536b0/sanic_transmute-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "477b62be8f434a93fedf69d08ad2736d", "sha256": "72dfe4a893177a0aa30d8693f18b184cad6e314ad306a86ce62cebf2fcaedd0d" }, "downloads": -1, "filename": "sanic-transmute-0.1.3.tar.gz", "has_sig": false, "md5_digest": "477b62be8f434a93fedf69d08ad2736d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6828, "upload_time": "2018-11-21T15:55:02", "url": "https://files.pythonhosted.org/packages/45/25/be6bde5a4cfee152ae678c062cb74061e0f7a725cc7990d9a27811ae8230/sanic-transmute-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9da20cc6f0718f55427fb405a03df6fe", "sha256": "35796f15153da6fbd31bf479b5faeb11c01c7a661ae94e10c8e7d63e336faa46" }, "downloads": -1, "filename": "sanic_transmute-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9da20cc6f0718f55427fb405a03df6fe", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9797, "upload_time": "2018-11-21T15:55:06", "url": "https://files.pythonhosted.org/packages/7f/0f/18327c9bb60f8630267bf5062dc8c3e21031227502a97d009c4fbd0536b0/sanic_transmute-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "477b62be8f434a93fedf69d08ad2736d", "sha256": "72dfe4a893177a0aa30d8693f18b184cad6e314ad306a86ce62cebf2fcaedd0d" }, "downloads": -1, "filename": "sanic-transmute-0.1.3.tar.gz", "has_sig": false, "md5_digest": "477b62be8f434a93fedf69d08ad2736d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6828, "upload_time": "2018-11-21T15:55:02", "url": "https://files.pythonhosted.org/packages/45/25/be6bde5a4cfee152ae678c062cb74061e0f7a725cc7990d9a27811ae8230/sanic-transmute-0.1.3.tar.gz" } ] }