{ "info": { "author": "Keming Yang", "author_email": "kemingy94@gmail.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3" ], "description": "# Falibrary\n\n[![GitHub Actions](https://github.com/kemingy/falibrary/workflows/Python%20package/badge.svg)](https://github.com/kemingy/falibrary/actions)\n![GitHub](https://img.shields.io/github/license/kemingy/falibrary)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/falibrary)\n\nFalcon add-on for API specification and validation.\n\nProvide OpenAPI document and validation for flask service.\n\nMainly built for Machine Learning Model services.\n\nIf you're using Flask, check my another Python library [Flaskerk](https://github.com/kemingy/flaskerk).\n\n## Quick Start\n\nInstall with `pip install falibrary` (Python 3.6+)\n\n### Basic example\n\n```py\nimport falcon\nfrom wsgiref import simple_server\nfrom pydantic import BaseModel\n\nfrom falibrary import Falibrary\n\napi = Falibrary(\n title='Demo Service',\n version='0.1.2',\n)\n\nclass Query(BaseModel):\n text: str\n\nclass Demo():\n @api.validate(query=Query)\n def on_post(self, req, resp):\n print(req.context.query)\n pass\n\nif __name__ == '__main__':\n app = falcon.API()\n app.add_route('/api/demo', Demo())\n api.register(app)\n\n httpd = simple_server.make_server('localhost', 8000, app)\n httpd.serve_forever()\n```\n\n### More features\n\n```py\nimport falcon\nfrom wsgiref import simple_server\nfrom pydantic import BaseModel, Schema\nfrom random import random\n\nfrom falibrary import Falibrary\n\napi = Falibrary(\n title='Demo Service',\n version='0.1.2',\n)\n\nclass Query(BaseModel):\n text: str = Schema()\n\nclass Response(BaseModel):\n label: int\n score: float = Schema(\n ...,\n gt=0,\n lt=1,\n )\n\nclass Data(BaseModel):\n uid: str\n limit: int\n vip: bool\n\nclass Classification():\n @api.validate(query=Query, data=Data, resp=Response, x=[falcon.HTTP_403])\n def on_post(self, req, resp, source, target):\n print(f'{source} => {target}')\n print(req.context.query)\n print(req.context.data)\n if random() < 0.5:\n raise falcon.HTTPForbidden(\"Bad luck. You're fobidden.\")\n return Response(label=int(10 * random()), score=random())\n\nif __name__ == '__main__':\n app = falcon.API()\n app.add_route('/api/{source}/{target}', Classification())\n api.register(app)\n\n httpd = simple_server.make_server('localhost', 8000, app)\n httpd.serve_forever()\n```\n\nTry it with `http POST ':8000/api/zh/en?text=hello' uid=0b01001001 limit=5 vip=true`.\n\nOpen the docs in http://127.0.0.1:8000/apidoc .\n\nFor more examples, check [examples](/examples).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kemingy/falibrary", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "falibrary", "package_url": "https://pypi.org/project/falibrary/", "platform": "", "project_url": "https://pypi.org/project/falibrary/", "project_urls": { "Homepage": "https://github.com/kemingy/falibrary" }, "release_url": "https://pypi.org/project/falibrary/0.3.3/", "requires_dist": [ "falcon (>=2.0.0)", "pydantic (>=0.32.1)" ], "requires_python": "", "summary": "", "version": "0.3.3" }, "last_serial": 5954519, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "631b190c021a35e7476f65757dc63d12", "sha256": "ad20cd638dadb9c27424bb32c7fbf3c16780bded6d0c9c737c3c6726942fc96b" }, "downloads": -1, "filename": "falibrary-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "631b190c021a35e7476f65757dc63d12", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1581, "upload_time": "2019-09-18T03:35:32", "url": "https://files.pythonhosted.org/packages/7a/d3/2c89dfa706bceaa24f921e9ae05d158d58896111f06d63f9a59035da6fa5/falibrary-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3150cd59a5f5b0bce06823f5479437d0", "sha256": "0d80b36752d7ee10067a7e7dcb82765fa067055e4f7011bbe66142beb01647fb" }, "downloads": -1, "filename": "falibrary-0.0.1.tar.gz", "has_sig": false, "md5_digest": "3150cd59a5f5b0bce06823f5479437d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1347, "upload_time": "2019-09-18T03:35:34", "url": "https://files.pythonhosted.org/packages/92/3f/dbce96a15abf0c61b06f2f09be2d1bad707d37d365948237c3004c5c5491/falibrary-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "6a56031793477935b66c3bc829547e3a", "sha256": "8052001dc91e23eb3fcd317307810cdff6dba62b44268757d68edade40feed95" }, "downloads": -1, "filename": "falibrary-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6a56031793477935b66c3bc829547e3a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6818, "upload_time": "2019-09-25T08:31:30", "url": "https://files.pythonhosted.org/packages/d6/42/8b10d817bc9b013acbaaa97769148c6b7cb677b0b3d0a190a1c4851d83dd/falibrary-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75ce7aa881ff063bfe398872cff954a6", "sha256": "1a8939af8face100808d5f230951bb9d1b2e8f0a15bac91c1a02b3fafbd11fc8" }, "downloads": -1, "filename": "falibrary-0.1.0.tar.gz", "has_sig": false, "md5_digest": "75ce7aa881ff063bfe398872cff954a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5586, "upload_time": "2019-09-25T08:31:32", "url": "https://files.pythonhosted.org/packages/ef/9d/68ef664beb9f392bde97deaf889c81e50e954dfc34ba1d1413b17de0d894/falibrary-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "654e380e4779140fc2dc7beebcd3e076", "sha256": "7db30e756e93416944d92d2c6970a4e02ae732a70fa522689a1fe772565050c8" }, "downloads": -1, "filename": "falibrary-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "654e380e4779140fc2dc7beebcd3e076", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6881, "upload_time": "2019-09-26T02:06:51", "url": "https://files.pythonhosted.org/packages/0e/e4/58930ccdff79ee170206e675001c256e911986487211788ff5d8dc26319f/falibrary-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "343cc0a253df71336e054d3e6f90ccb4", "sha256": "67f6b9df3a748b6a97b56d84edd691b47ef15439750508508f15e82c1d904197" }, "downloads": -1, "filename": "falibrary-0.2.0.tar.gz", "has_sig": false, "md5_digest": "343cc0a253df71336e054d3e6f90ccb4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5660, "upload_time": "2019-09-26T02:06:53", "url": "https://files.pythonhosted.org/packages/65/42/13fee699e6f12a28c49765ccfc8b5a0cfd27da5b64bd0215c50a12df14c3/falibrary-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "67c9d6cb0c652d81ef1f4bb662326c55", "sha256": "00058b2000a84490c5cb736a6fcf5fa05abf8eb44d37718e4cc67c82b171b03c" }, "downloads": -1, "filename": "falibrary-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "67c9d6cb0c652d81ef1f4bb662326c55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7777, "upload_time": "2019-10-01T09:13:36", "url": "https://files.pythonhosted.org/packages/9f/e7/8eeba88cd9ba27c06e877d685aa9be4b7ec44b89db8b265796b02b655a8e/falibrary-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "571bdf452a11064a2938b5893efb4dde", "sha256": "b619ac36642813edf3a4d2d647bc3ec87f1f107099f19f0d958c8f78dcebad06" }, "downloads": -1, "filename": "falibrary-0.3.0.tar.gz", "has_sig": false, "md5_digest": "571bdf452a11064a2938b5893efb4dde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6257, "upload_time": "2019-10-01T09:13:37", "url": "https://files.pythonhosted.org/packages/27/01/ee38395c0f338508911fe10d796997f739bee6740858803d23600217404a/falibrary-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "5cdab6a88a73740ae81e52edad5beab7", "sha256": "148d785f13b0193f5e7a940ba68a89ddcc855b11ccbc0cedec894c95d034ebac" }, "downloads": -1, "filename": "falibrary-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5cdab6a88a73740ae81e52edad5beab7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8067, "upload_time": "2019-10-08T01:44:46", "url": "https://files.pythonhosted.org/packages/ed/d6/c8a16f2c42396e4acdda06074452befb44fd517d8a095978a5859d06ad9b/falibrary-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92b41ae3f697e159205a183e24d11d4b", "sha256": "7ac458b0131e6f390f2364c03339de759aec45997ad8c12cb3933df769f4ae73" }, "downloads": -1, "filename": "falibrary-0.3.1.tar.gz", "has_sig": false, "md5_digest": "92b41ae3f697e159205a183e24d11d4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6547, "upload_time": "2019-10-08T01:44:48", "url": "https://files.pythonhosted.org/packages/8f/b4/eb3b4e8f85c73ac1624d305b53ed041812cc54f49f031c5ed08c7c93ce01/falibrary-0.3.1.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "700806bc58cde1e2cc3539775ff13b42", "sha256": "a25c8aa11b74697ed278f5c97c8ca9243e2842810376fd6dd605a9bb02d3da35" }, "downloads": -1, "filename": "falibrary-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "700806bc58cde1e2cc3539775ff13b42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8072, "upload_time": "2019-10-10T12:30:48", "url": "https://files.pythonhosted.org/packages/a1/55/d4928b401d01b03f106f4ba7c16986269f5b130558bb7fc559d1ab332fb3/falibrary-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f67a1fb58c5d4172c7b4eb1467e1099e", "sha256": "cd5b18968b2620804bfb43cb5e16c6744459bd112e4fb239dbf7f81604b622e8" }, "downloads": -1, "filename": "falibrary-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f67a1fb58c5d4172c7b4eb1467e1099e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6559, "upload_time": "2019-10-10T12:30:50", "url": "https://files.pythonhosted.org/packages/6c/30/478ed00a7cd685454d42df68673491531a03007aad9baacf4bff18352978/falibrary-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "700806bc58cde1e2cc3539775ff13b42", "sha256": "a25c8aa11b74697ed278f5c97c8ca9243e2842810376fd6dd605a9bb02d3da35" }, "downloads": -1, "filename": "falibrary-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "700806bc58cde1e2cc3539775ff13b42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8072, "upload_time": "2019-10-10T12:30:48", "url": "https://files.pythonhosted.org/packages/a1/55/d4928b401d01b03f106f4ba7c16986269f5b130558bb7fc559d1ab332fb3/falibrary-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f67a1fb58c5d4172c7b4eb1467e1099e", "sha256": "cd5b18968b2620804bfb43cb5e16c6744459bd112e4fb239dbf7f81604b622e8" }, "downloads": -1, "filename": "falibrary-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f67a1fb58c5d4172c7b4eb1467e1099e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6559, "upload_time": "2019-10-10T12:30:50", "url": "https://files.pythonhosted.org/packages/6c/30/478ed00a7cd685454d42df68673491531a03007aad9baacf4bff18352978/falibrary-0.3.3.tar.gz" } ] }