{ "info": { "author": "Greenhouse AI team", "author_email": "ai@greenhousegroup.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "Description\n============\n\nIntroduction\n------------\n\nApian is an opinionated library for setting up a Python-based service with a\nminimum of boilerplate. It is a thin wrapper around `flask-restplus\n`_ and provides:\n\n* Documentation using OpenAPI.\n* Info and health resources.\n* JWT-based authentication.\n* Configuration injection using `miniscule\n `_.\n\nExample\n-------\n\nAdd a configuration file :code:`config.yaml` in the root of the project, with the\nfollowing contents:\n\n.. code-block:: yaml\n\n environment: production\n debug: False\n authentication:\n enabled: True\n secret: secret\n\nTo create a Flask application and run it on :code:`localhost:5000`:\n\n.. code-block:: python\n\n from apian import read_config, create_api, create_app, authenticated\n from flask_restplus import Namespace, Resource\n\n ns = Namespace(\"user\")\n\n @ns.route(\"\")\n class UserItem(Resource):\n\n @authenticated\n def get(self, user_id):\n return user_id\n\n config = read_config()\n api = create_app(\"my-app\", config)\n api.add_namespace(ns)\n app = create_app(api, config)\n app.run()\n\nThe application has endpoints at the paths:\n\n* :code:`GET /my-app/api/info` - Return information about the service.\n* :code:`GET /my-app/api/health` - Return the health status of the service.\n* :code:`GET /my-app/api/user` - Return the user ID set in the Bearer token.\n\nTo access the user resource, ensure that the `requests\n`_ package is installed and execute the\nfollowing snippet:\n\n.. code-block:: python\n\n import jwt\n import requests\n\n def auth_token():\n user_id = 10\n claims = {\"iat\": dt.datetime.utcnow(), \"sub\": user_id}\n key = \"secret\"\n return jwt.encode(claims, key, \"HS256\")\n\n headers = {\"Authorization\": \"Bearer {}\".format(\n requests.get(\"http://localhost:5000/my-app/api/user\", headers=headers)", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/greenhousegroup/ai/libraries/apian/", "keywords": "rest http web", "license": "", "maintainer": "", "maintainer_email": "", "name": "apian", "package_url": "https://pypi.org/project/apian/", "platform": "", "project_url": "https://pypi.org/project/apian/", "project_urls": { "Homepage": "https://gitlab.com/greenhousegroup/ai/libraries/apian/" }, "release_url": "https://pypi.org/project/apian/0.3.1/", "requires_dist": null, "requires_python": "", "summary": " Small, opinionated library for building REST APIs.", "version": "0.3.1" }, "last_serial": 5820593, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "6683d0c3f89fa80ae1c675f171789831", "sha256": "0ec8fd939f3c60a9de417bd7a8ac69913dda6df38e564975871d4eda19918f2b" }, "downloads": -1, "filename": "apian-0.0.1.tar.gz", "has_sig": false, "md5_digest": "6683d0c3f89fa80ae1c675f171789831", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1678, "upload_time": "2019-05-06T19:57:16", "url": "https://files.pythonhosted.org/packages/0d/2b/d7ea71b819279cc173fd87fc421fd00ba448eadb3b28477830bcc60af187/apian-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "41c6d7653c9b704bcde246dd5dc1998f", "sha256": "362765ea11c1c62e86ff005565ac3266771d7ac9f67ac4e7847b3e3d07903df2" }, "downloads": -1, "filename": "apian-0.0.2.tar.gz", "has_sig": false, "md5_digest": "41c6d7653c9b704bcde246dd5dc1998f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1671, "upload_time": "2019-05-06T20:01:47", "url": "https://files.pythonhosted.org/packages/9b/b8/bf69c03565b3d94eaf5736eda9db26f4323d447246f6563bfae5aa75ef02/apian-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d86b335cb17a46ebebfab3a501982a7b", "sha256": "890f645c300d9f0bb4f743462f1267ec3e8404854848a2c3cd16ae2c978b8851" }, "downloads": -1, "filename": "apian-0.0.3.tar.gz", "has_sig": false, "md5_digest": "d86b335cb17a46ebebfab3a501982a7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3554, "upload_time": "2019-05-06T20:03:45", "url": "https://files.pythonhosted.org/packages/8a/98/ff98c60c345336254025b68643ec1d753212ba9189064c53629285e58129/apian-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "4dd2c76564ad82d1ec1b80df87244e4d", "sha256": "81b38ce1a54d0e507f3a9806741d16faac7bd6eb375525dc75f50bb3b95e7150" }, "downloads": -1, "filename": "apian-0.0.4.tar.gz", "has_sig": false, "md5_digest": "4dd2c76564ad82d1ec1b80df87244e4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3554, "upload_time": "2019-05-06T20:08:16", "url": "https://files.pythonhosted.org/packages/d9/f6/086e3fd80dcbb0c984994d85845e94c60a11d72c633666f70789996250a0/apian-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "237c0a6f6a2e4e3ca3e7d4733aacfb1d", "sha256": "d5ac7632bcbc19a79496261816aa504e46fe41935e4b2648fc9cc80ee574623d" }, "downloads": -1, "filename": "apian-0.0.5.tar.gz", "has_sig": false, "md5_digest": "237c0a6f6a2e4e3ca3e7d4733aacfb1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5559, "upload_time": "2019-06-03T22:01:58", "url": "https://files.pythonhosted.org/packages/73/71/76d7e2d29e62ed9ffbf351012f6e6fa1744e35d39522d044831eb66fd370/apian-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "e7bc4ab33856192d6209a28ca9175acd", "sha256": "3a30ec832588b8153257dcef9f826a38ed9c72ed213dc3ea90ea243deebb2a43" }, "downloads": -1, "filename": "apian-0.0.6.tar.gz", "has_sig": false, "md5_digest": "e7bc4ab33856192d6209a28ca9175acd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5713, "upload_time": "2019-07-03T11:05:05", "url": "https://files.pythonhosted.org/packages/1a/1a/88b810f5cd34400d567e2b3167261ae7427387efd50645cf01d89c7176c5/apian-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "7825aea45599d7e370f542b233b6798d", "sha256": "3ffa9e07983f0c23a9bc3425d52ce6fe32711b556baaca96f83a09da1532245b" }, "downloads": -1, "filename": "apian-0.0.7.tar.gz", "has_sig": false, "md5_digest": "7825aea45599d7e370f542b233b6798d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5714, "upload_time": "2019-07-03T11:05:45", "url": "https://files.pythonhosted.org/packages/05/cb/51a5665295cf45bccd5cf16960663d3e8a69ff52167f51a8568f83adac60/apian-0.0.7.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "5bec7f57c47d8f68267c3963b0189f95", "sha256": "c38273e9f5d8091cef2e7a063a179cfe5265751df3711cef832ffa7596d2c030" }, "downloads": -1, "filename": "apian-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5bec7f57c47d8f68267c3963b0189f95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3793, "upload_time": "2019-05-06T20:36:41", "url": "https://files.pythonhosted.org/packages/17/79/f4eb4c1e73ca683947b494393984a61c256fbbbaf94e631a754fff688097/apian-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2364a8b7633ef96365792cd9ccc86cd9", "sha256": "6c9aa1d94c62eac9192879336c3adf2c53a6202dc9cb9af2fd62101a0fa6f74d" }, "downloads": -1, "filename": "apian-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2364a8b7633ef96365792cd9ccc86cd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4326, "upload_time": "2019-05-27T20:47:51", "url": "https://files.pythonhosted.org/packages/32/8d/ee9d9aff04b9494a629eb9740313f8d81c132ee8359d4e36806f869b55b4/apian-0.2.0.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "8b688883f785b4312ab6bdcbf29fca02", "sha256": "a74703ca9f86c5e6465dedc27e919d65117abc28f66da1bf678a8262b9378bd2" }, "downloads": -1, "filename": "apian-0.2.4.tar.gz", "has_sig": false, "md5_digest": "8b688883f785b4312ab6bdcbf29fca02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5282, "upload_time": "2019-05-28T13:38:22", "url": "https://files.pythonhosted.org/packages/62/bc/463140988eed5e3c4ad62f328be5928d5ab938515df5c4a52d78b0190eb8/apian-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "c17300fb1236732686219b73a0165ed2", "sha256": "951b363c24f9b110088cb55cbe1f27ec5788c3f7190ea0aff28e329e8f5c005c" }, "downloads": -1, "filename": "apian-0.2.5.tar.gz", "has_sig": false, "md5_digest": "c17300fb1236732686219b73a0165ed2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5531, "upload_time": "2019-05-28T21:40:54", "url": "https://files.pythonhosted.org/packages/fb/f1/7b72a066cace4adcf9077bc324884e97b2b0ecbc191978971aafad8b01dc/apian-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "b1379db462549dd98287205b3035a4e6", "sha256": "ea525ec80317e6fe66e3aef19be7850bd239a847ed32399fe776acee2a1d057f" }, "downloads": -1, "filename": "apian-0.2.6.tar.gz", "has_sig": false, "md5_digest": "b1379db462549dd98287205b3035a4e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5565, "upload_time": "2019-05-30T11:33:51", "url": "https://files.pythonhosted.org/packages/d2/e7/839450a4357b3ca714d6f8723b2f63e40b9727ca1ffe6c67e972d53eaf66/apian-0.2.6.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fae6e38c9b73844591b7e6f3849721f4", "sha256": "4c6216f380e2096ea1e9782583514a4cbc47bd5e946f1d9859eb01f5dd5e479b" }, "downloads": -1, "filename": "apian-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fae6e38c9b73844591b7e6f3849721f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5684, "upload_time": "2019-07-03T11:35:11", "url": "https://files.pythonhosted.org/packages/a3/8e/edb810b67f1518359dda49173da63760268d6c5868a7fda0902fce015a6f/apian-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "889fc526bffe1813e276d8dabaf56606", "sha256": "c3138ca4a2da83659b911bf56f8c04a390eccea4d1464b13d7bb2b87ceb7d104" }, "downloads": -1, "filename": "apian-0.3.1.tar.gz", "has_sig": false, "md5_digest": "889fc526bffe1813e276d8dabaf56606", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5685, "upload_time": "2019-09-12T13:47:06", "url": "https://files.pythonhosted.org/packages/e7/89/ebefa9a4413a61d653935e01c6a0613b161b95b4d6b7a3888d37c757a3dd/apian-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "889fc526bffe1813e276d8dabaf56606", "sha256": "c3138ca4a2da83659b911bf56f8c04a390eccea4d1464b13d7bb2b87ceb7d104" }, "downloads": -1, "filename": "apian-0.3.1.tar.gz", "has_sig": false, "md5_digest": "889fc526bffe1813e276d8dabaf56606", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5685, "upload_time": "2019-09-12T13:47:06", "url": "https://files.pythonhosted.org/packages/e7/89/ebefa9a4413a61d653935e01c6a0613b161b95b4d6b7a3888d37c757a3dd/apian-0.3.1.tar.gz" } ] }