{ "info": { "author": "Ryan Castner", "author_email": "castner.rr@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "# apistar-jwt\n\n[![pypi](https://img.shields.io/pypi/v/apistar_jwt.svg)](https://pypi.org/project/apistar-jwt) [![travis](https://img.shields.io/travis/audiolion/apistar-jwt.svg)](https://travis-ci.org/audiolion/apistar_jwt) [![codecov](https://codecov.io/gh/audiolion/apistar-jwt/branch/master/graph/badge.svg)](https://codecov.io/gh/audiolion/apistar-jwt)\n\n\nJSON Web Token Component for use with *API Star >= 0.4*.\n\n## Installation\n\n```\n$ pip install apistar-jwt\n```\n\nAlternatively, install through [pipenv](https://pipenv.readthedocs.io/en/latest/).\n\n```\n$ pipenv install apistar-jwt\n```\n\n## Usage\n\n\nRegister the `JWT` Component with your APIStar app.\n\n```python\nfrom apistar import App\nfrom apistar_jwt.token import JWT\n\nroutes = [\n # ...\n]\n\ncomponents = [\n JWT({\n 'JWT_SECRET': 'BZz4bHXYQD?g9YN2UksRn7*r3P(eo]P,Rt8NCWKs6VP34qmTL#8f&ruD^TtG',\n }),\n]\n\napp = App(routes=routes, components=components)\n```\n\nInject the `JWT` component in your login function and use it to encode the JWT.\n\n```python\nfrom apistar import exceptions, types, validators\nfrom apistar_jwt.token import JWT\n\nclass UserData(types.Type):\n email = validators.String()\n password = validators.String()\n\n\ndef login(data: UserData, jwt: JWT) -> dict:\n # do some check with your database here to see if the user is authenticated\n user = db_login(data)\n if not user:\n raise exceptions.Forbidden('Incorrect username or password.')\n payload = {\n 'id': user.id,\n 'username': user.email,\n 'random_data': '102310',\n }\n token = jwt.encode(payload)\n if token is None:\n # encoding failed, handle error\n raise exceptions.BadRequest()\n return {'token': token}\n```\n\nInject the `JWTUser` component in any resource where you want authentication with the provided JWT.\n\n```python\nfrom apistar_jwt.token import JWTUser\n\ndef welcome(user: JWTUser) -> dict:\n message = f'Welcome {user.username}#{user.id}, here is your random data: {user.token[\"random_data\"]}'\n return {'message': message}\n```\n\n**Note**\n\nRequests made with JWT The token must be passed as an `Authorization` header using the `Bearer` scheme in requests made to a resource.\n\n```shell\n$ curl -i -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoxfQ.fCqeAJGHYwZ9y-hJ3CKUWPiENOM0xtGsMeUWmIq4o8Q\" http://localhost:8080/some-resource-requiring-jwt-auth\n```\n\n### Decorators\n\nWe provide two decorators for convenience to enforce authentication required or allow anonymous users for a route:\n\n```python\nfrom apistar_jwt.token import JWTUser\nfrom apistar_jwt.decorators import anonymous_allowed, authentication_required\n\n\n@authentication_required\ndef auth_required(request: http.Request, user: JWTUser):\n return user.__dict__\n\n\n@anonymous_allowed\ndef anon_allowed(request: http.Request, user: JWTUser):\n if user:\n return user.__dict__\n return None\n```\n\nThe `@authentication_required` decorator will enforce the user to be logged in for that route. Meanwhile the `@anonymous_allowed` will set `user: JWTUser=None` and allow anonymous users to hit the route. The default behavior is `@authentication_required` so you do not need to annotate with this decorator, it is just to help your code be explicit.\n\n## Settings\n\nThere are two settings this package uses to identify the `username` and `user_id` keys in the JWT payload, they are by default:\n\n```python\n{\n 'JWT_USER_ID': 'id',\n 'JWT_USER_NAME': 'username',\n}\n```\n\nIf your JWT uses some other kind of key, override these keys when you instantiate your component:\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_USER_ID': 'pk',\n 'JWT_USER_NAME': 'email',\n })\n]\n```\n\n`JWT_WHITE_LIST` allows you to specify a list of route functions that will not require JWT authentication. This is useful if you have setup a default authentication policy but want to open up certain routes, especially ones that might be in third party packages or in apistar itself like the schema docs.\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_WHITE_LIST': ['serve_schema', 'home'],\n })\n]\n```\n\nIn this instance, the `serve_schema` and `home` Routes will not require JWT authentication.\n\n`JWT_ALGORITHMS` is related to the algorithms used for decoding JWTs. By default we only use 'HS256' but JWT supports passing an array of [supported algorithms](https://pyjwt.readthedocs.io/en/latest/algorithms.html#digital-signature-algorithms) which it will sequentially try when attempting to decode.\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_ALGORITHMS': ['HS256', 'RSA512'],\n })\n]\n```\n\n`JWT_SECRET` is a long, randomized, secret key that should never be checked into version control.\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_SECRET': 'QXp4Z83.%2F@JBiaPZ8T9YDwoasn[dn)cZ=fE}KqHMJPNka3QyPNq^KnMqL$oCsU9BC?.f9,oF2.2t4oN?[g%iq89(+'\n })\n]\n```\n\nFor all other settings, use `JWT_OPTIONS` key which will pass them along to the underlying [PyJWT](https://pyjwt.readthedocs.io/en/latest/usage.html#registered-claim-names) library when decoding.\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_OPTIONS': {\n 'issuer': 'urn:foo',\n 'audience': 'urn:bar',\n 'leeway': 10,\n },\n })\n]\n```\n\nQuick rundown of the options:\n\n`audience` is the urn for this applications audience, it must match a value in the `aud` key of the payload. [Read more about audience claim](https://pyjwt.readthedocs.io/en/latest/usage.html#audience-claim-aud).\n\n`issuer` is the urn of the application that issues the token, it must match a value in the `iss` key of the payload. [Read more about the issuer claim](https://pyjwt.readthedocs.io/en/latest/usage.html#issuer-claim-iss)\n\n`leeway` is the number of seconds of margin an expiration time claim in the past will still be valid for.\n\nA fully customized `JWT` component would like like the following:\n\n```python\nfrom apistar_jwt.token import JWT\n\ncomponents = [\n JWT({\n 'JWT_ALGORITHMS': ['HS256', 'RSA512'],\n 'JWT_USER_ID': 'pk',\n 'JWT_USER_NAME': 'email',\n 'JWT_SECRET': 'QXp4Z83.%2F@JBiaPZ8T9YDwoasn[dn)cZ=fE}KqHMJPNka3QyPNq^KnMqL$oCsU9BC?.f9,oF2.2t4oN?[g%iq89(+',\n 'JWT_OPTIONS': {\n 'issuer': 'urn:foo',\n 'audience': 'urn:bar',\n 'leeway': 10,\n },\n 'JWT_WHITE_LIST': ['serve_schema'],\n })\n]\n```\n\n## Developing\n\nThis project uses [`pipenv`](https://docs.pipenv.org) to manage its development environment, and [`pytest`](https://docs.pytest.org) as its tests runner. To install development dependencies:\n\n```\npipenv install --dev\n```\n\nTo run tests:\n\n```\npipenv shell\npytest\n```\n\nThis project uses [Codecov](https://codecov.io/gh/audiolion/apistar-jwt) to enforce code coverage on all pull requests. To run tests locally and output a code coverage report, run:\n\n```\npipenv shell\npytest --cov=apistar_test/\n```\n\n\n# HISTORY\n\n## 0.4.2\n\n* Everything is now a top level export as well, e.g. `from apistar_jwt import JWT` (thanks @jgiradet)\n\n## 0.4.1\n\n* Added decorator support, `@anonymous_allowed` and `@authentication_required`\n* Added back in test suite\n* Updated typings and fixed a bug with instantiating `JWT` component\n\n## 0.4.0 ** BREAKING CHANGE **\n\nApistar JWT updated to support Apistar >= 0.4. Pin to 0.3.3 for Apistar 0.3.x support\n\n## 0.3.3\n\nUpdate dev deps so we are using metadata 2.1 spec for pypi.\n\n## 0.3.2\n\nUpdates to pin dependencies for Apistar 0.3.x and add Markdown rendering to pypi.org\n\n## 0.3.1\n\nRelease for Apistar 0.3.x\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/audiolion/apistar-jwt", "keywords": "apistar_jwt", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "apistar_jwt", "package_url": "https://pypi.org/project/apistar_jwt/", "platform": "", "project_url": "https://pypi.org/project/apistar_jwt/", "project_urls": { "Homepage": "https://github.com/audiolion/apistar-jwt" }, "release_url": "https://pypi.org/project/apistar_jwt/0.5.0/", "requires_dist": [ "apistar (>=0.4)", "PyJWT" ], "requires_python": "", "summary": "A JSON Web Token Component for API Star", "version": "0.5.0" }, "last_serial": 3821406, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5df944e5bf9216cebd91b4338df2adc1", "sha256": "492c0ceca88e0e74c5c2bdb9cedabacb7495a57e4c8ad409e397a85c4a7801f5" }, "downloads": -1, "filename": "apistar_jwt-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5df944e5bf9216cebd91b4338df2adc1", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9152, "upload_time": "2017-10-04T23:45:47", "url": "https://files.pythonhosted.org/packages/e9/3e/d001a62fb67a1441c99a9cf9aef17d4f15b4504cf5bd42961d9e5fd06360/apistar_jwt-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d4c9d958d76a9f6dabd351470c7193df", "sha256": "0c6061752cc87347f3ccd9edcb7bb2487304460c3626091a2fcd0988d5b455c2" }, "downloads": -1, "filename": "apistar_jwt-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d4c9d958d76a9f6dabd351470c7193df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6802, "upload_time": "2017-10-04T23:45:45", "url": "https://files.pythonhosted.org/packages/2c/a2/7f48c80c41e6d9cf39931324d7a29897b7403dbd6a1117b85ce80a664795/apistar_jwt-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "05d114f212e1b1f79e7f5cd0375d61c7", "sha256": "ebe625b681bc5bd01952dc4c8ed1698136304998f13d3ded57bdd757a9a62e10" }, "downloads": -1, "filename": "apistar_jwt-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05d114f212e1b1f79e7f5cd0375d61c7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9190, "upload_time": "2017-10-05T00:57:04", "url": "https://files.pythonhosted.org/packages/14/80/028d78e7e12709222ce6a68384fe58dadbce35ad14cde85252039b8c30ea/apistar_jwt-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01d4e401f5195c866bd607559ed8cf4e", "sha256": "121e7e341af0942c1ea74783d336faab90fc6e3fd5ee0a4148f2a8479e840c8e" }, "downloads": -1, "filename": "apistar_jwt-0.1.1.tar.gz", "has_sig": false, "md5_digest": "01d4e401f5195c866bd607559ed8cf4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6806, "upload_time": "2017-10-05T00:57:02", "url": "https://files.pythonhosted.org/packages/17/1e/075423f0f9d1d665249cf505dd3c5d33b4046430e9000bcef29118aa8d4e/apistar_jwt-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "14b910d6d6ac32273790716fda5768e5", "sha256": "69f9558fa7026234394ba2c6eb23e3a72d004d2c20c2e5aeac56994132b0cff4" }, "downloads": -1, "filename": "apistar_jwt-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14b910d6d6ac32273790716fda5768e5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9204, "upload_time": "2017-10-06T19:33:31", "url": "https://files.pythonhosted.org/packages/cb/87/625ff91d5a030af32c8a5bcfea0b78bed6367d1ab5959feec5d45bcd8ea2/apistar_jwt-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be9b7b4807c9ef0623fb0c7d84a6688f", "sha256": "e2e1bf0b7db274e8f9083f67202712bf59e63d0dc0c2db8e92b23b182afa7843" }, "downloads": -1, "filename": "apistar_jwt-0.1.2.tar.gz", "has_sig": false, "md5_digest": "be9b7b4807c9ef0623fb0c7d84a6688f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6811, "upload_time": "2017-10-06T19:32:04", "url": "https://files.pythonhosted.org/packages/36/22/e1efe6e31d8cfb9ac434d99dd3f788c1de5ab899b15a0445322ddc812fea/apistar_jwt-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "59ae70689fb7c3176cc6f840b1fda381", "sha256": "76a787f7c28d68add08e813c17a1d0c5bd915a2af159379e10250c054ef88456" }, "downloads": -1, "filename": "apistar_jwt-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "59ae70689fb7c3176cc6f840b1fda381", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9926, "upload_time": "2017-10-09T18:32:01", "url": "https://files.pythonhosted.org/packages/dc/28/e317174e550fd06bf5001656604b5d9c73d0d6a49b627a723fb71dbfb4ac/apistar_jwt-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99c90a522519530e3e6093b628b6c0b0", "sha256": "e72c6aa3dfe897e30049e86cb05bce378103141b44eae2f5fb27813ab8e332e1" }, "downloads": -1, "filename": "apistar_jwt-0.2.0.tar.gz", "has_sig": false, "md5_digest": "99c90a522519530e3e6093b628b6c0b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8120, "upload_time": "2017-10-09T18:31:57", "url": "https://files.pythonhosted.org/packages/ca/90/fc1f0834ea05a4ad188d432b60aaaf159627174885c0de99c020cb61146b/apistar_jwt-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "37637a954999a1780f02fb89e04242bd", "sha256": "db58a5f0a81451d9ad31b0259cb11b0c750921e58b35c74280970dee9f46d719" }, "downloads": -1, "filename": "apistar_jwt-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "37637a954999a1780f02fb89e04242bd", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9933, "upload_time": "2017-10-13T22:41:24", "url": "https://files.pythonhosted.org/packages/6c/58/7d2873bb60af3fd76f8a48d6cda361baa555a0f71be74c1c107a7d1ffd70/apistar_jwt-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dc1fab95c4817c8874b26aecff564ba", "sha256": "2358fd3950cdcb5696ced99bba06924aa1a161b6f7874cfb384fbb49af789820" }, "downloads": -1, "filename": "apistar_jwt-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2dc1fab95c4817c8874b26aecff564ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8127, "upload_time": "2017-10-13T22:41:20", "url": "https://files.pythonhosted.org/packages/9e/ce/9c4ecb73b83bb3aa67f4e91277659482f9a9bded1a1a78c911907a82f56e/apistar_jwt-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "611e4856d87e323488d523910cb4c20b", "sha256": "9bb170206b8f3364a84548f3596ee8afb70239aa9a34b82c802f6fb01d894850" }, "downloads": -1, "filename": "apistar_jwt-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "611e4856d87e323488d523910cb4c20b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10346, "upload_time": "2018-03-12T12:27:33", "url": "https://files.pythonhosted.org/packages/02/9d/c616fdfe00fba94a04cbde68818227e0c3a99b0a2db1d1055ccce859474f/apistar_jwt-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d34887cf8ef93badac562206b59a7575", "sha256": "f9d39002a32baa1505c311b1653350312de17d0ad55fa89b36643ccb7e8830f8" }, "downloads": -1, "filename": "apistar_jwt-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d34887cf8ef93badac562206b59a7575", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8541, "upload_time": "2018-03-12T12:27:30", "url": "https://files.pythonhosted.org/packages/e2/73/9a19eda541b9d0e08b31034b7e83c6b08f0f7b33480fbf40b011eb308114/apistar_jwt-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "373082b50ad0fad9baaea9071d8e0aa5", "sha256": "8479322800495bee5fc3ee4df9d5255880f7fd88bc3e004b37f1b8dcb5765ef8" }, "downloads": -1, "filename": "apistar_jwt-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "373082b50ad0fad9baaea9071d8e0aa5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 6382, "upload_time": "2018-04-12T15:43:33", "url": "https://files.pythonhosted.org/packages/a2/d0/ebd4b42c4dc44f2f3e77774c670d1ba292bac30e7bb44f9cbb2fce4e34d3/apistar_jwt-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0766768faac29188423245a76c3ab244", "sha256": "76365e6241b73cd2a5702cae02dc25dae2aa51640531ce569b65a4bf7f141e0d" }, "downloads": -1, "filename": "apistar_jwt-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0766768faac29188423245a76c3ab244", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8607, "upload_time": "2018-04-12T15:43:31", "url": "https://files.pythonhosted.org/packages/3c/dd/371c02b24d3b662f4f3b779048bb3c37078331425700cc3cdf3eefb80776/apistar_jwt-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "3a73bd316118752f048a7244e3ecbaf4", "sha256": "7ddf6646a8fb2a9fc960baff7885abc3a69f736364be9d14d9dd4f8f6f515416" }, "downloads": -1, "filename": "apistar_jwt-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3a73bd316118752f048a7244e3ecbaf4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10578, "upload_time": "2018-04-12T17:12:24", "url": "https://files.pythonhosted.org/packages/eb/3f/fc89282e25625ea01f04f734422490332aa3114251ddc531203fce6c5a8f/apistar_jwt-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be7a9b6bd16ea21678e34c277faf219c", "sha256": "3d6bf399b4d1c3303a2fd2b63f3ea0812d7a99ecf7df92cd61f3b6676fc5dccf" }, "downloads": -1, "filename": "apistar_jwt-0.3.2.tar.gz", "has_sig": false, "md5_digest": "be7a9b6bd16ea21678e34c277faf219c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8708, "upload_time": "2018-04-12T17:12:24", "url": "https://files.pythonhosted.org/packages/3e/5c/4a8692beab5b4153ab0d391ab52bd5de9ab1a5d569bad07096195c44aa48/apistar_jwt-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "3ea380b609ff39879cf0b2636b001fd5", "sha256": "d1c1ef655cfba593f79bc86395b41aa5667cb50d15801b399f8f8e4cd8446bed" }, "downloads": -1, "filename": "apistar_jwt-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ea380b609ff39879cf0b2636b001fd5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6490, "upload_time": "2018-04-12T18:00:35", "url": "https://files.pythonhosted.org/packages/79/74/17800d643fa34f982d85f6ec4411a8356c533d830b638c96736fdfb33360/apistar_jwt-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffe98190948968f215d755474c3ed4a6", "sha256": "3a4288701244da28bd78c5f8811ce7ab67d9116e32cf8ef23389c3f07a37aa62" }, "downloads": -1, "filename": "apistar_jwt-0.3.3.tar.gz", "has_sig": false, "md5_digest": "ffe98190948968f215d755474c3ed4a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9460, "upload_time": "2018-04-12T18:00:38", "url": "https://files.pythonhosted.org/packages/29/e9/8ffb77c8dc107c9e904ce930060d1cd3e41499835c7de956d121820434d3/apistar_jwt-0.3.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "66e77ee14a1b26f9d5cf1005cd650099", "sha256": "4a4aa75fa36a562dfbe8f61a526dfc3934630414fffcd9d6e05a0e26bf1d8904" }, "downloads": -1, "filename": "apistar_jwt-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "66e77ee14a1b26f9d5cf1005cd650099", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5863, "upload_time": "2018-04-12T23:25:54", "url": "https://files.pythonhosted.org/packages/a0/17/537068b33676e5cb1f4f110902b32bdb055128decd9afaccd632ff1ce885/apistar_jwt-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "603ad98d55a1885f1d4300a4fc2ca24e", "sha256": "74b8db2d0fa6259bbdfaeda30b5c7f62de6fc7001a11fb7fe710b47bf552caf2" }, "downloads": -1, "filename": "apistar_jwt-0.4.0.tar.gz", "has_sig": false, "md5_digest": "603ad98d55a1885f1d4300a4fc2ca24e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8797, "upload_time": "2018-04-12T23:25:55", "url": "https://files.pythonhosted.org/packages/ee/36/5d757838bac33154351707b8be7a46b200981cb235b6624c75923559b20e/apistar_jwt-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e7b7beb76b29b8341faf74b56d9f0fad", "sha256": "3c08045a9b58c6308788d4fe0c9fe03b38c11703497cc39ace1ccbe9a1fc9718" }, "downloads": -1, "filename": "apistar_jwt-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7b7beb76b29b8341faf74b56d9f0fad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6545, "upload_time": "2018-04-13T04:33:07", "url": "https://files.pythonhosted.org/packages/3c/4e/a28575c86aeb06f31eb5184db8664ac9780b2229ef388c95d5a882f9240b/apistar_jwt-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "712483b443caabe1755ee4972b8a58f9", "sha256": "beb44f7ee6241e4a56b0d65b83e51a1b0a6e01be1637b85f5c3ba24157da52f2" }, "downloads": -1, "filename": "apistar_jwt-0.4.1.tar.gz", "has_sig": false, "md5_digest": "712483b443caabe1755ee4972b8a58f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8905, "upload_time": "2018-04-13T04:33:08", "url": "https://files.pythonhosted.org/packages/ac/98/29326ce8b881abd5e02a09ca82b7ec7fdc172bcb60e76ada835c80c3df16/apistar_jwt-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "b19bab26d8a387d69637008edaccf7b9", "sha256": "2305b2a024b0e4b832835cd69b9b892cba167a9dd6ead171f7039e5d6cdaca89" }, "downloads": -1, "filename": "apistar_jwt-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b19bab26d8a387d69637008edaccf7b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6697, "upload_time": "2018-04-21T19:27:38", "url": "https://files.pythonhosted.org/packages/6b/72/3a8e2ad78b5f53769d5a68d033add5cfbe7e923c9516c25772dd5f1c6fed/apistar_jwt-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "332a4b4829612847c6bfdd08e3a3206a", "sha256": "426f3374a542815ef15de8675564a4b75418fdeb778ce1a8d10385cbd51ea5db" }, "downloads": -1, "filename": "apistar_jwt-0.4.2.tar.gz", "has_sig": false, "md5_digest": "332a4b4829612847c6bfdd08e3a3206a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9009, "upload_time": "2018-04-21T19:27:39", "url": "https://files.pythonhosted.org/packages/d0/fe/6021e994204e21c19fa365fd70fa37409152ac9c73e966a501f145036e42/apistar_jwt-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "942324c35e06e8802c3ec6908948c94e", "sha256": "109e5f666b2c57417d698426c7cc31ac4eab540b0860d61f3478d9262cc3f3af" }, "downloads": -1, "filename": "apistar_jwt-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "942324c35e06e8802c3ec6908948c94e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6945, "upload_time": "2018-04-30T17:07:28", "url": "https://files.pythonhosted.org/packages/fb/ad/bd7d1a60128ff2ecf730354ce2108cc5ad32e546ff1382f791dee3c519e6/apistar_jwt-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc59cffec93f9c7c327623420edc85c7", "sha256": "9cc78c32e175c3265dcb65425b76ee19afd90a3654cbb59c9e824df7fae94cee" }, "downloads": -1, "filename": "apistar_jwt-0.5.0.tar.gz", "has_sig": false, "md5_digest": "cc59cffec93f9c7c327623420edc85c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9455, "upload_time": "2018-04-30T17:07:29", "url": "https://files.pythonhosted.org/packages/01/33/547a9bc4d744aa7747cff13fb7fab47d9fb181ccdecfb0b298a625c59d14/apistar_jwt-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "942324c35e06e8802c3ec6908948c94e", "sha256": "109e5f666b2c57417d698426c7cc31ac4eab540b0860d61f3478d9262cc3f3af" }, "downloads": -1, "filename": "apistar_jwt-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "942324c35e06e8802c3ec6908948c94e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6945, "upload_time": "2018-04-30T17:07:28", "url": "https://files.pythonhosted.org/packages/fb/ad/bd7d1a60128ff2ecf730354ce2108cc5ad32e546ff1382f791dee3c519e6/apistar_jwt-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc59cffec93f9c7c327623420edc85c7", "sha256": "9cc78c32e175c3265dcb65425b76ee19afd90a3654cbb59c9e824df7fae94cee" }, "downloads": -1, "filename": "apistar_jwt-0.5.0.tar.gz", "has_sig": false, "md5_digest": "cc59cffec93f9c7c327623420edc85c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9455, "upload_time": "2018-04-30T17:07:29", "url": "https://files.pythonhosted.org/packages/01/33/547a9bc4d744aa7747cff13fb7fab47d9fb181ccdecfb0b298a625c59d14/apistar_jwt-0.5.0.tar.gz" } ] }