{ "info": { "author": "Adam Thornton", "author_email": "athornton@lsst.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5" ], "description": "[![Build Status](https://travis-ci.org/lsst-sqre/sqre-apikit.svg?branch=master)](https://travis-ci.org/lsst-sqre/sqre-apikit)\n\n# sqre-apikit\n\nLSST DM SQuaRE microservice convenience tools.\n\n## Rationale\n\nIn order to create a microservice hosted behind https://api.lsst.codes,\na service will need to provide a route on `/metadata` and\n`/v{{api_version}}/metadata`. That route must serve appropriate\nmetadata about the service.\n\n### Metadata format\n\nThe metadata served must be a JSON object, and must contain the\nfollowing fields: \n\n`name`: `str`\n\n`version`: `str`\n\n`repository`: `str`\n\n`description`: `str`\n\n`api_version`: `str`\n\n`auth`: `str`\n\nThe fields `name`, `version`, `api_version`, and `description` are\narbitrary, although semantic versioning is strongly encouraged, and the\nAPI version should reflect the version of the `api.lsst.codes` API in\nuse (currently `1.0`, documentation pending).\n\nAuth must be one of `none`, `basic`, or `bitly-proxy`. It represents\nthe way in which the microservice will authenticate to GitHub: either it\ndoesn't need to, it uses HTTP Basic Auth with a username and service\ntoken, or it uses the Bitly OAuth2 Proxy with a username, a password,\nand the proxy starting-OAuth2 endpoint.\n\n## Provided Functionality\n\n`sqre-apikit` provides one module, `apikit`, which contains three\nfunctions, `set_flask_metadata`, `add_metadata_route`, and\n`return_metadata`, and a class, `APIFlask`.\n\nThe `set_flask_metadata` sets metadata on an existing Flask app and adds\nmetadata routes. `add_metadata_route` is designed to add routing for\neach component in the route list to an existing Flask app.\n`return_metadata` returns the JSON representation of the metadata for\nthe service.\n\nThe `APIFlask` class creates an instance of a subclass of `flask.Flask`\nwhich has the metadata added and the route(s) already baked into it.\n\nThe class comes with a method, `add_route_prefix`, which adds the\nmetadata route underneath another route. This is useful, for instance,\nif wiring the microservice up through Kubernetes and its Ingress\nresources, which provide routing but not rewriting.\n\n## Installation\n\n`sqre-apikit` runs on Python 2.7 or 3.5. You can install it with\n\n```bash\npip install sqre-apikit\n```\n\nThis will also install the dependency `Flask`.\n\n## Example usage\n\n### `apikit.set_flask_metadata()`\n\n```python\nimport apikit\nimport flask\n\napp = flask.Flask(\"Hello\")\napikit.set_flask_metadata(app,\n version=\"0.0.1\",\n repository=\"http://example.repo\",\n description=\"Hello World App\")\n```\n\n### `apikit.APIFlask`\n\n```python\nimport apikit\n\napp = apikit.APIFlask(name=\"Hello\",\n version=\"0.0.1\",\n repository=\"http://example.repo\",\n description=\"Hello World App\")\n```\n\n## Development\n\nTo develop apikit, create a Python virtual environment, and\n\n```bash\ngit clone https://github.com/lsst-sqre/sqre-apikit.git\ncd sqre-apikit\nvirtualenv venv\n. venv/bin/activate\npip install -r requirements.txt\npython setup.py develop\n```\nTests can be run with [pytest](http://pytest.org/latest/):\n\n```bash\npy.test tests\n```\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lsst-sqre/sqre-apikit", "keywords": "lsst", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sqre-apikit", "package_url": "https://pypi.org/project/sqre-apikit/", "platform": "", "project_url": "https://pypi.org/project/sqre-apikit/", "project_urls": { "Homepage": "https://github.com/lsst-sqre/sqre-apikit" }, "release_url": "https://pypi.org/project/sqre-apikit/0.1.2/", "requires_dist": [ "Flask (==0.11.1)", "future (==0.16.0)", "requests (<3.0.0,>=2.13.0)", "structlog (>=16.1.0)" ], "requires_python": "", "summary": "LSST Data Management SQuaRE microservice tools", "version": "0.1.2" }, "last_serial": 3264238, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "2acd20a0de5bcf04f18039cc98473be8", "sha256": "07b61c910daa98ace1d80e5e3bca0f0394d658d89b27d3522bd3f94972ddb253" }, "downloads": -1, "filename": "sqre_apikit-0.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2acd20a0de5bcf04f18039cc98473be8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8052, "upload_time": "2016-12-20T19:38:36", "url": "https://files.pythonhosted.org/packages/0f/c0/2d86c442a83c5f5019c5b843414b339279ae98f4c786de10058b5b053e17/sqre_apikit-0.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d0b03054c3e093fc889c7773d349c92", "sha256": "e7c69f1071d2d02bd483969a40d22df86d756138b7ba0294e6b72c0a979501cf" }, "downloads": -1, "filename": "sqre-apikit-0.0.10.tar.gz", "has_sig": false, "md5_digest": "8d0b03054c3e093fc889c7773d349c92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6366, "upload_time": "2016-12-20T19:38:37", "url": "https://files.pythonhosted.org/packages/c4/f0/99f5833478957be871a0f210cbaf718c11d093ca6a2f3570592d93dea82a/sqre-apikit-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "a46d5afe8a102dac02e3be8529f9d898", "sha256": "4388a3f41af869bef88524842b8b973b277a6f8e38acf2283d5e9ad8b8fd334c" }, "downloads": -1, "filename": "sqre_apikit-0.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a46d5afe8a102dac02e3be8529f9d898", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8083, "upload_time": "2017-03-01T22:43:11", "url": "https://files.pythonhosted.org/packages/72/c4/fd6d79744caedd163a4c4316bf0317c6302c8e7f537032fec56bc68eba44/sqre_apikit-0.0.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78e7f4473a0a61ef94fbd5e0e0442051", "sha256": "22fcc9fc4240ccc0ea5febdd397b212d8f86f143a3c9599ded8ce72901a12732" }, "downloads": -1, "filename": "sqre-apikit-0.0.11.tar.gz", "has_sig": false, "md5_digest": "78e7f4473a0a61ef94fbd5e0e0442051", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6382, "upload_time": "2017-03-01T22:43:12", "url": "https://files.pythonhosted.org/packages/e1/36/329a009b64f8a60d87951902d166c3e6575935b3f1b3358351e4e61af353/sqre-apikit-0.0.11.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "9b204cb6e7f03e05c9ebca34dbd0cb66", "sha256": "73f4095f7e801748fa091c923a12b111acb48942b2e77d0efe8c0d10e354ec01" }, "downloads": -1, "filename": "sqre_apikit-0.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9b204cb6e7f03e05c9ebca34dbd0cb66", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7631, "upload_time": "2016-12-20T05:57:42", "url": "https://files.pythonhosted.org/packages/ff/4d/b36ea337d14b7a877544e16eaf3482f1624b3811283b20d69b7062de07b5/sqre_apikit-0.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d8ff5a15a15ae36eda09816e58b47eb", "sha256": "3948ab7ac5034e63c998ec53f7ca4d7a28bc122291292991e1519a7bd8c3e7e9" }, "downloads": -1, "filename": "sqre-apikit-0.0.8.tar.gz", "has_sig": false, "md5_digest": "0d8ff5a15a15ae36eda09816e58b47eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6027, "upload_time": "2016-12-20T05:57:43", "url": "https://files.pythonhosted.org/packages/73/ce/f8cbbb9ad1d21d2bfe4770022bd63a345e6ada5c8edd2dd209aa92b8fd6f/sqre-apikit-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "197de9ab19c4222ff8aa2df9a4fbc8c6", "sha256": "f69c534b8a800b8143b90811abc188611c8767e327f08079fb7abc79d9d8db39" }, "downloads": -1, "filename": "sqre_apikit-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "197de9ab19c4222ff8aa2df9a4fbc8c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8018, "upload_time": "2016-12-20T17:37:17", "url": "https://files.pythonhosted.org/packages/6b/d2/a16147c0983c1b69b182f58342b906e61731fd62719e52ae9457e80a214f/sqre_apikit-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0602682f29084864e1d6c4ae56a10045", "sha256": "cedc0c8cd9eb093a550e1b46e48b5bc1331707fbbc2a82f76c5fadd89a465da0" }, "downloads": -1, "filename": "sqre-apikit-0.0.9.tar.gz", "has_sig": false, "md5_digest": "0602682f29084864e1d6c4ae56a10045", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6332, "upload_time": "2016-12-20T17:37:18", "url": "https://files.pythonhosted.org/packages/3b/de/5cd160bf7fb94640ee0e6482ce71081d8414b68d231bf2087266383ca8e0/sqre-apikit-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "0b50837f06c1b41f7871e5466c03837b", "sha256": "608c8d5d7bbafe17f2929964e813a9018897395a4501f83d8483b2368a94a44a" }, "downloads": -1, "filename": "sqre_apikit-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0b50837f06c1b41f7871e5466c03837b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9240, "upload_time": "2017-03-03T23:04:29", "url": "https://files.pythonhosted.org/packages/33/d3/9b17f653456aa0f2db0e26f2aebb8cbde532812238ebf59826e2c2b20173/sqre_apikit-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "756a451ff00db026121b201a9735cc42", "sha256": "661355f8368953bcd7c3983f9ab7a3e934f7741018787cc07ad4806d7fc42ea1" }, "downloads": -1, "filename": "sqre-apikit-0.1.0.tar.gz", "has_sig": false, "md5_digest": "756a451ff00db026121b201a9735cc42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7535, "upload_time": "2017-03-03T23:04:30", "url": "https://files.pythonhosted.org/packages/8e/35/a68006030a2585e4c57bd02cba34e779b94d8b24c2e9a308e2007122ac35/sqre-apikit-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "b5dcb50b5a34061ede85a676529e9112", "sha256": "cab9501888c6b3298475513849d9138ecc9f11c1bc9544aa3efe25dbb82b68eb" }, "downloads": -1, "filename": "sqre_apikit-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b5dcb50b5a34061ede85a676529e9112", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10490, "upload_time": "2017-03-14T21:02:13", "url": "https://files.pythonhosted.org/packages/06/ec/98888c66d7d9aa0719507e544d3e4b5e4be61ce4ac8f68adbcba32ae6d6e/sqre_apikit-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10edcf316643c88cc88a078378875628", "sha256": "701cdd0f1327c5832b2221a03ffe1028b0a9af0b66fd72201953a00d3146c943" }, "downloads": -1, "filename": "sqre-apikit-0.1.1.tar.gz", "has_sig": false, "md5_digest": "10edcf316643c88cc88a078378875628", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8755, "upload_time": "2017-03-14T21:02:14", "url": "https://files.pythonhosted.org/packages/4d/29/0521dd7421300a2238cd62b213a55c7468189b0f52262794fc75588d8d93/sqre-apikit-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "77554041223b54514fd3bcf5368d95d0", "sha256": "6eaba0af9f80547c0addf2c55d9ebf461593462c00dc1121d46b2d49a220505f" }, "downloads": -1, "filename": "sqre_apikit-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "77554041223b54514fd3bcf5368d95d0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10709, "upload_time": "2017-10-19T23:12:21", "url": "https://files.pythonhosted.org/packages/f8/3f/4f4ab11fa1baf8d922d5f763c814fd2c5e71d222c9f14b70a6e66361f806/sqre_apikit-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d20fea32a30817a1c38d54ae1d9d8ea1", "sha256": "f72f2246d7185417e1caf2957f377b11f04223261af47c4fe32feb289f80cbfb" }, "downloads": -1, "filename": "sqre-apikit-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d20fea32a30817a1c38d54ae1d9d8ea1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8950, "upload_time": "2017-10-19T23:12:22", "url": "https://files.pythonhosted.org/packages/d3/fb/3c03ce894a3db4e950764c413135a6cd2b662f4076ca383952afaf494bc8/sqre-apikit-0.1.2.tar.gz" } ], "0.1.2b1": [ { "comment_text": "", "digests": { "md5": "3ac69f982354fb17311242243bea72f7", "sha256": "8bddad4a2aac21227db1fa109e28778394926b3428a7182ef1a94c44833da1f9" }, "downloads": -1, "filename": "sqre_apikit-0.1.2b1-py3.5.egg", "has_sig": false, "md5_digest": "3ac69f982354fb17311242243bea72f7", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 15752, "upload_time": "2017-10-13T22:40:50", "url": "https://files.pythonhosted.org/packages/4f/df/e7d60538f4833dd89a1e1c850781314dc1a22ab1486ce57192da7b9e3439/sqre_apikit-0.1.2b1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "d13c444d26dd045b004d163a9eb1ef69", "sha256": "bb9737c619b678cdb2e677956cbe74780845d9ac20a47df6cf8c41271f7189d1" }, "downloads": -1, "filename": "sqre_apikit-0.1.2b1-py3-none-any.whl", "has_sig": false, "md5_digest": "d13c444d26dd045b004d163a9eb1ef69", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10735, "upload_time": "2017-10-13T22:40:47", "url": "https://files.pythonhosted.org/packages/a4/22/921f4841b671ad8e0e7be89045de96b06d9275495ef13acbfa56d3841273/sqre_apikit-0.1.2b1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "480ca28ee69d869dfa2cb78042cc12a7", "sha256": "15240ff23f3daab064d0b2f686f5fb1b64ae9b1cd046e44c41e8b41b2bf10a6c" }, "downloads": -1, "filename": "sqre-apikit-0.1.2b1.tar.gz", "has_sig": false, "md5_digest": "480ca28ee69d869dfa2cb78042cc12a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8967, "upload_time": "2017-10-13T22:40:49", "url": "https://files.pythonhosted.org/packages/7c/41/967ff6293471ac9444ee4c616e7c446bce14588764a924e0413d6be5a995/sqre-apikit-0.1.2b1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "77554041223b54514fd3bcf5368d95d0", "sha256": "6eaba0af9f80547c0addf2c55d9ebf461593462c00dc1121d46b2d49a220505f" }, "downloads": -1, "filename": "sqre_apikit-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "77554041223b54514fd3bcf5368d95d0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10709, "upload_time": "2017-10-19T23:12:21", "url": "https://files.pythonhosted.org/packages/f8/3f/4f4ab11fa1baf8d922d5f763c814fd2c5e71d222c9f14b70a6e66361f806/sqre_apikit-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d20fea32a30817a1c38d54ae1d9d8ea1", "sha256": "f72f2246d7185417e1caf2957f377b11f04223261af47c4fe32feb289f80cbfb" }, "downloads": -1, "filename": "sqre-apikit-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d20fea32a30817a1c38d54ae1d9d8ea1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8950, "upload_time": "2017-10-19T23:12:22", "url": "https://files.pythonhosted.org/packages/d3/fb/3c03ce894a3db4e950764c413135a6cd2b662f4076ca383952afaf494bc8/sqre-apikit-0.1.2.tar.gz" } ] }