{ "info": { "author": "Bruce Wu", "author_email": "strongbugman@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Starchart\n\n## API document support for Starlette project\n\n![Build](https://travis-ci.com/strongbugman/starchart.svg?branch=master)\n![Code Coverage](https://codecov.io/gh/strongbugman/starchart/branch/master/graph/badge.svg)\n\n## Features\n\n* Inherit `starlette.schemas.BaseSchemaGenerator` \n* Support OpenAPI 2 and 3, define API schema by your way\n* Provide configurable [SwaggerUI](http://swagger.io/swagger-ui/)\n* ...\n\n## Install\n\n```shell\npip install -U starchart\n```\n\n## Tutorial\n\nLet see a simple example app:\n```python\n\"\"\"OpenAPI2(Swagger) example\n\"\"\"\nfrom functools import partial\n\nfrom starlette.applications import Starlette\nfrom starlette.requests import Request\nfrom starlette.responses import JSONResponse\nfrom starlette.endpoints import HTTPEndpoint\nfrom uvicorn import run\n\nfrom starchart.generators import SchemaGenerator\nfrom starchart.endpoints import SwaggerUI, RedocUI, Schema\n\n\napp = Starlette(debug=True)\n\napp.schema_generator = SchemaGenerator(\n title=\"Cat store\",\n description=\"Cat store api document\",\n version=\"0.1\",\n openapi_version=\"2.0\",\n)\n# define data\nCATS = {\n 1: {\"id\": 1, \"name\": \"DangDang\", \"age\": 2},\n 2: {\"id\": 2, \"name\": \"DingDing\", \"age\": 1},\n}\n# add schema definition\napp.schema_generator.add_schema(\n \"Cat\",\n {\n \"properties\": {\n \"id\": {\"description\": \"global unique\", \"type\": \"integer\"},\n \"name\": {\"type\": \"string\"},\n \"age\": {\"type\": \"integer\"},\n },\n \"type\": \"object\",\n },\n)\n\n\n# define routes and schema(in doc string)\n@app.route(\"/cat/\")\nclass Cat(HTTPEndpoint):\n def get(self, req: Request):\n \"\"\"\n summary: Get single cat\n tags:\n - cat\n parameters:\n - name: id\n type: integer\n in: query\n required: True\n responses:\n \"200\":\n description: OK\n schema:\n $ref: '#/definitions/Cat'\n \"404\":\n description: Not found\n \"\"\"\n return JSONResponse(CATS[1])\n\n def delete(self, req: Request):\n \"\"\"\n summary: Delete single cat\n tags:\n - cat\n parameters:\n - name: id\n type: integer\n in: query\n required: True\n responses:\n \"204\":\n description: OK\n schema:\n $ref: '#/definitions/Cat'\n \"404\":\n description: Not found\n \"\"\"\n cat = CATS.pop(1)\n return JSONResponse(cat)\n\n\n# define doc by yaml or json file\n@app.route(\"/cats/\", methods=[\"GET\"])\n@app.schema_generator.schema_from(\"./examples/docs/cats_get.yml\")\ndef list_cats(req: Request):\n return JSONResponse(list(CATS.values()))\n\n\n@app.route(\"/cats/\", methods=[\"POST\"])\n@app.schema_generator.schema_from(\"./examples/docs/cats_post.json\")\nasync def list_cats(req: Request):\n cat = await req.json()\n CATS[cat[\"id\"]] = cat\n return JSONResponse(cat)\n\n\n# add document's endpoints\nschema_path = \"/docs/schema/\"\napp.add_route(\n \"/docs/swagger/\",\n SwaggerUI,\n methods=[\"GET\"],\n name=\"SwaggerUI\",\n include_in_schema=False,\n)\napp.add_route(\n \"/docs/redoc/\", RedocUI, methods=[\"GET\"], name=\"SwaggerUI\", include_in_schema=False\n)\napp.add_route(\n schema_path, Schema, methods=[\"GET\"], name=\"SwaggerSchema\", include_in_schema=False\n)\n# config endpoints\nSwaggerUI.set_schema_url(schema_path)\nRedocUI.set_schema_url(schema_path)\nSchema.set_schema_loader(partial(app.schema_generator.get_schema, app.routes))\n\nrun(app)\n```\n\nThen we can get swagger UI:\n![](docs/SwaggerUI.jpg)\n\n## More examples\n\nSee **examples/**\n\n\n## Details\n\n### How can I define endpoints schema?\n\n* Function or method's docstring\n* From yaml or json file(by `schema_from`)\n* ...\n\n### How the swagger UI works?\n\nWe provide two endpoints: a standard web page (see *starchart/static/index.html*) and a \nstandard schema api\n\n\n## TODO\n\n- [x] OpenAPI3 example app\n- [X] Redoc UI support\n- [X] Provide a Starlette extension, make it easier to integrate your projects\n- [ ] Requset/Response validation by defined schema\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/strongbugman/starchart", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "starchart", "package_url": "https://pypi.org/project/starchart/", "platform": "", "project_url": "https://pypi.org/project/starchart/", "project_urls": { "Homepage": "https://github.com/strongbugman/starchart" }, "release_url": "https://pypi.org/project/starchart/0.3.1/", "requires_dist": null, "requires_python": "", "summary": "Starlette's api document support", "version": "0.3.1" }, "last_serial": 4844684, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f3b37be5761e63c5ec1ef0858f2aa891", "sha256": "3c500a46794a6872d6ca3e7d2acb6c8f628f40c56aa8724e7158231557b1a087" }, "downloads": -1, "filename": "starchart-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f3b37be5761e63c5ec1ef0858f2aa891", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55093, "upload_time": "2019-01-28T09:44:29", "url": "https://files.pythonhosted.org/packages/1b/c1/dc3ebb97cac6dfcd579f13fbc2d782710f8d6dc92666b907125461b2a564/starchart-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d77fc851f5ad773eca85d1af5225a33d", "sha256": "6c3516bb8d909c2078de9d4ce7ef956e78f2dd3928817c364fb0b6f0b53707f9" }, "downloads": -1, "filename": "starchart-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d77fc851f5ad773eca85d1af5225a33d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55617, "upload_time": "2019-01-29T03:49:24", "url": "https://files.pythonhosted.org/packages/2e/65/c779cdf91cb1f78566baa01c4b49b2233484d95ec754ed0eb6c358623756/starchart-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "902f37370c4313ca605956b945640a72", "sha256": "1dc5ddca2e6001797a6ec5a656347d3f966fa3601e0a5983e1f4e551c9e6c164" }, "downloads": -1, "filename": "starchart-0.2.1.tar.gz", "has_sig": false, "md5_digest": "902f37370c4313ca605956b945640a72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55615, "upload_time": "2019-01-29T03:54:35", "url": "https://files.pythonhosted.org/packages/4b/ed/ff270248e3b2df04927fc056c4836d60974c13b31c7c2e855525156f8d37/starchart-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d92db918111b89e9e78cc1b399274a6c", "sha256": "09d39f71e5d4d647fad6c3e8afa1ad44278c4091ca5fc1f01ff951aa41a47cc6" }, "downloads": -1, "filename": "starchart-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d92db918111b89e9e78cc1b399274a6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56099, "upload_time": "2019-02-01T03:50:52", "url": "https://files.pythonhosted.org/packages/35/64/f3a172bc49e98c1599eed5545a41afa62e29fb972a16e9c42f4fffd064be/starchart-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c72ef3a0e932c667315554ea8b60d1a9", "sha256": "b68ad8b0ef2813b36f0bf98118275bd3635c45bd69134dbe880bf3b8289dbd30" }, "downloads": -1, "filename": "starchart-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c72ef3a0e932c667315554ea8b60d1a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56101, "upload_time": "2019-02-20T09:55:40", "url": "https://files.pythonhosted.org/packages/12/4a/43bca06420deb5cf858c00e833b853c5f4bc9311b59cf6aac3b8e8f66bd7/starchart-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c72ef3a0e932c667315554ea8b60d1a9", "sha256": "b68ad8b0ef2813b36f0bf98118275bd3635c45bd69134dbe880bf3b8289dbd30" }, "downloads": -1, "filename": "starchart-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c72ef3a0e932c667315554ea8b60d1a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56101, "upload_time": "2019-02-20T09:55:40", "url": "https://files.pythonhosted.org/packages/12/4a/43bca06420deb5cf858c00e833b853c5f4bc9311b59cf6aac3b8e8f66bd7/starchart-0.3.1.tar.gz" } ] }