fastjwt


Namefastjwt JSON
Version 0.4.1 PyPI version JSON
download
home_pagehttps://ocarinow.github.io/fastjwt/
SummaryFastAPI Plugin for reusable JWT Authentication Management
upload_time2024-03-07 22:41:50
maintainer
docs_urlNone
authorWalid BENBIHI
requires_python>=3.9
licenseMIT
keywords fastapi jwt json-web-token authentication security api
VCS
bugtrack_url
requirements anyio attrs black bleach certifi cffi cfgv charset-normalizer click-log click colorama coverage cryptography dateparser defusedxml distlib docstr-coverage docutils dotty-dict exceptiongroup fastapi filelock flake8-html flake8 genbadge ghp-import gitdb gitpython griffe h11 identify idna importlib-metadata iniconfig invoke isort jaraco-classes jeepney jinja2 keyring markdown markupsafe mccabe mergedeep mkdocs-autorefs mkdocs-material-extensions mkdocs-material mkdocs mkdocstrings-python mkdocstrings mkdocstrings more-itertools mypy-extensions nodeenv packaging pathspec pillow pkginfo platformdirs pluggy pre-commit pycodestyle pycparser pydantic pyflakes pygments pyjwt pymdown-extensions pytest-asyncio pytest-cov pytest python-dateutil python-gitlab python-semantic-release pytz-deprecation-shim pytz pywin32-ctypes pyyaml-env-tag pyyaml readme-renderer regex requests-toolbelt requests rfc3986 secretstorage semver setuptools-scm setuptools six smmap sniffio starlette tomli tomlkit tqdm twine typing-extensions tzdata tzlocal urllib3 uvicorn virtualenv watchdog webencodings wheel zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # fastjwt
<!-- Base badges -->
<p style="text-align:center;">
    <a href="https://github.com/ocarinow/fastjwt">
        <img src="https://img.shields.io/pypi/pyversions/fastjwt" alt="Supported Python Version" />
    </a>
    <a href="https://pypi.org/project/fastjwt">
        <img src="https://img.shields.io/pypi/v/fastjwt" alt="Package Version" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/blob/main/LICENSE">
        <img src="https://img.shields.io/github/license/ocarinow/fastjwt" alt="Licence" />
    </a>
    <a href="https://ocarinow.github.io/fastjwt/">
        <img src="https://img.shields.io/badge/docs-available-brightgreen" alt="Documentation"></img>
    </a>
</p>
<!-- GitHub Action badges -->
<p style="text-align:center;">
    <a href="https://github.com/ocarinow/fastjwt/actions" alt="Build Status">
        <img src="https://github.com/ocarinow/fastjwt/actions/workflows/cicd-release.yaml/badge.svg" alt="Build Status" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions" alt="Test Status">
        <img src="https://github.com/ocarinow/fastjwt/actions/workflows/cicd-test.yaml/badge.svg" alt="Test Status" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions" alt="Publish Status">
        <img src="https://github.com/ocarinow/fastjwt/actions/workflows/cicd-publish.yaml/badge.svg" alt="Publish Status" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions" alt="Publish Status">
        <img src="https://github.com/ocarinow/fastjwt/actions/workflows/cicd-documentation.yaml/badge.svg" alt="Documentation Status" />
    </a>
</p>
<!-- Code quality badges -->
<p style="text-align:center;">
    <a href="https://github.com/ocarinow/fastjwt/actions">
        <img src="https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/coverage.svg" alt="Coverage" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions">
        <img src="https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/pytest.svg" alt="Tests" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions">
        <img src="https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/interrogate.svg" alt="Docstring" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/actions">
        <img src="https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/flake8.svg" alt="Flake8" />
    </a>
</p>
<!-- Activity badges -->
<p style="text-align:center;">
    <a href="https://github.com/ocarinow/fastjwt">
        <img src="https://img.shields.io/github/issues/ocarinow/fastjwt" alt="Issues" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt">
        <img src="https://img.shields.io/github/issues-pr/ocarinow/fastjwt" alt="Pull Requests" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt">
        <img src="https://img.shields.io/github/repo-size/ocarinow/fastjwt" alt="Repo Size" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt">
        <img src="https://img.shields.io/pypi/dm/fastjwt" alt="Downloads" />
    </a>
</p>
<!-- Community badges -->
<p style="text-align:center;">
    <a href="https://github.com/ocarinow/fastjwt/stargazers" alt="Stars">
        <img src="https://img.shields.io/github/stars/ocarinow/fastjwt?style=social" alt="Stars" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt" alt="Forks">
        <img src="https://img.shields.io/github/forks/ocarinow/fastjwt?style=social" alt="Forks" />
    </a>
    <a href="https://github.com/ocarinow/fastjwt/watchers" alt="Watchers">
        <img src="https://img.shields.io/github/watchers/ocarinow/fastjwt?style=social" alt="Watchers" />
    </a>
</p>

FastJWT is a FastAPI Plugin for reusable JWT Authentication Management. **fastjwt** enables easy JSON Web Tokens management within your FastAPI application.

_fastjwt_ is heavily inspired from its Flask equivalent [Flask-JWT-Extended](https://flask-jwt-extended.readthedocs.io/en/stable/), _special thanks to [@vimalloc](https://github.com/vimalloc) fot the amazing work_.

**Documentation**: [https://ocarinow.github.io/fastjwt/](https://ocarinow.github.io/fastjwt/)

## Features

- [X] Encode/Decode JWT for application Authentication
- [X] Automatic JWT detection in request
  - [X] JWT in Headers
  - [X] JWT in Cookies
  - [X] JWT in Query strings
  - [X] JWT in JSON Body
- [X] Implicit/Explicit token refresh mechanism
- [X] Freshness state of token
- [X] Route protection
  - [X] Token type based protection _(access/refresh)_
  - [X] Token freshness protection
  - [X] Partial route protection
- [X] Handle custom user logic for revoked token validation
- [X] Handle custom logic for token recipient retrieval _(ORM, pydantic serialization...)_
- [X] Provide FastAPI compliant dependency injection API
- [X] Automatic error handling
- [ ] Scope Management (WIP)

## Setup

### Requirements

FastJWT is built on top of the following dependencies:

- [FastAPI](https://github.com/tiangolo/fastapi) as web framework
- [Pydantic](https://github.com/pydantic/pydantic) as data validation
- [PyJWT](https://github.com/jpadilla/pyjwt) as python implementation of the JSON Web Token standard

FastJWT also relies on [`typing-extensions`](https://pypi.org/project/typing-extensions/) for backward compatibility _(python3.9)_

> Note
>
> FastAPI, while required for **fastjwt**, is not declared as a dependency and must be installed prior with `pip install fastapi`

### Install

```shell
# With pip
pip install fastjwt
# With poetry
poetry add fastjwt
# With pipenv
pipenv install fastjwt
```

## Example

```py
from fastapi import FastAPI, Depends
from fastjwt import FastJWT

app = FastAPI()
security = FastJWT()

@app.get('/login')
def login():
    return security.create_access_token(uid='foo')

@app.get('/protected', dependencies=[Depends(security.access_token_required())])
def protected():
    return "This is a protected endpoint"
```

## Development

> <span style="color:orange;">**WORK IN PROGRESS**</span>
>
> The development guide is not available yet

## Contributing

> <span style="color:orange;">**WORK IN PROGRESS**</span>
>
> The contribution guide is not available yet

## License

This project is open source under [MIT License](https://github.com/ocarinow/fastjwt/blob/main/LICENSE)

            

Raw data

            {
    "_id": null,
    "home_page": "https://ocarinow.github.io/fastjwt/",
    "name": "fastjwt",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "fastapi,jwt,JSON-Web-Token,authentication,security,api",
    "author": "Walid BENBIHI",
    "author_email": "contact@ocarinow.com",
    "download_url": "https://files.pythonhosted.org/packages/37/3e/4ca625d601b168b4c87553455afd74d520f2777a41a7b5fa7950ef6180bd/fastjwt-0.4.1.tar.gz",
    "platform": null,
    "description": "# fastjwt\n<!-- Base badges -->\n<p style=\"text-align:center;\">\n    <a href=\"https://github.com/ocarinow/fastjwt\">\n        <img src=\"https://img.shields.io/pypi/pyversions/fastjwt\" alt=\"Supported Python Version\" />\n    </a>\n    <a href=\"https://pypi.org/project/fastjwt\">\n        <img src=\"https://img.shields.io/pypi/v/fastjwt\" alt=\"Package Version\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/blob/main/LICENSE\">\n        <img src=\"https://img.shields.io/github/license/ocarinow/fastjwt\" alt=\"Licence\" />\n    </a>\n    <a href=\"https://ocarinow.github.io/fastjwt/\">\n        <img src=\"https://img.shields.io/badge/docs-available-brightgreen\" alt=\"Documentation\"></img>\n    </a>\n</p>\n<!-- GitHub Action badges -->\n<p style=\"text-align:center;\">\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\" alt=\"Build Status\">\n        <img src=\"https://github.com/ocarinow/fastjwt/actions/workflows/cicd-release.yaml/badge.svg\" alt=\"Build Status\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\" alt=\"Test Status\">\n        <img src=\"https://github.com/ocarinow/fastjwt/actions/workflows/cicd-test.yaml/badge.svg\" alt=\"Test Status\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\" alt=\"Publish Status\">\n        <img src=\"https://github.com/ocarinow/fastjwt/actions/workflows/cicd-publish.yaml/badge.svg\" alt=\"Publish Status\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\" alt=\"Publish Status\">\n        <img src=\"https://github.com/ocarinow/fastjwt/actions/workflows/cicd-documentation.yaml/badge.svg\" alt=\"Documentation Status\" />\n    </a>\n</p>\n<!-- Code quality badges -->\n<p style=\"text-align:center;\">\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\">\n        <img src=\"https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/coverage.svg\" alt=\"Coverage\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\">\n        <img src=\"https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/pytest.svg\" alt=\"Tests\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\">\n        <img src=\"https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/interrogate.svg\" alt=\"Docstring\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/actions\">\n        <img src=\"https://raw.githubusercontent.com/ocarinow/fastjwt/main/docs/badges/flake8.svg\" alt=\"Flake8\" />\n    </a>\n</p>\n<!-- Activity badges -->\n<p style=\"text-align:center;\">\n    <a href=\"https://github.com/ocarinow/fastjwt\">\n        <img src=\"https://img.shields.io/github/issues/ocarinow/fastjwt\" alt=\"Issues\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt\">\n        <img src=\"https://img.shields.io/github/issues-pr/ocarinow/fastjwt\" alt=\"Pull Requests\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt\">\n        <img src=\"https://img.shields.io/github/repo-size/ocarinow/fastjwt\" alt=\"Repo Size\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt\">\n        <img src=\"https://img.shields.io/pypi/dm/fastjwt\" alt=\"Downloads\" />\n    </a>\n</p>\n<!-- Community badges -->\n<p style=\"text-align:center;\">\n    <a href=\"https://github.com/ocarinow/fastjwt/stargazers\" alt=\"Stars\">\n        <img src=\"https://img.shields.io/github/stars/ocarinow/fastjwt?style=social\" alt=\"Stars\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt\" alt=\"Forks\">\n        <img src=\"https://img.shields.io/github/forks/ocarinow/fastjwt?style=social\" alt=\"Forks\" />\n    </a>\n    <a href=\"https://github.com/ocarinow/fastjwt/watchers\" alt=\"Watchers\">\n        <img src=\"https://img.shields.io/github/watchers/ocarinow/fastjwt?style=social\" alt=\"Watchers\" />\n    </a>\n</p>\n\nFastJWT is a FastAPI Plugin for reusable JWT Authentication Management. **fastjwt** enables easy JSON Web Tokens management within your FastAPI application.\n\n_fastjwt_ is heavily inspired from its Flask equivalent [Flask-JWT-Extended](https://flask-jwt-extended.readthedocs.io/en/stable/), _special thanks to [@vimalloc](https://github.com/vimalloc) fot the amazing work_.\n\n**Documentation**: [https://ocarinow.github.io/fastjwt/](https://ocarinow.github.io/fastjwt/)\n\n## Features\n\n- [X] Encode/Decode JWT for application Authentication\n- [X] Automatic JWT detection in request\n  - [X] JWT in Headers\n  - [X] JWT in Cookies\n  - [X] JWT in Query strings\n  - [X] JWT in JSON Body\n- [X] Implicit/Explicit token refresh mechanism\n- [X] Freshness state of token\n- [X] Route protection\n  - [X] Token type based protection _(access/refresh)_\n  - [X] Token freshness protection\n  - [X] Partial route protection\n- [X] Handle custom user logic for revoked token validation\n- [X] Handle custom logic for token recipient retrieval _(ORM, pydantic serialization...)_\n- [X] Provide FastAPI compliant dependency injection API\n- [X] Automatic error handling\n- [ ] Scope Management (WIP)\n\n## Setup\n\n### Requirements\n\nFastJWT is built on top of the following dependencies:\n\n- [FastAPI](https://github.com/tiangolo/fastapi) as web framework\n- [Pydantic](https://github.com/pydantic/pydantic) as data validation\n- [PyJWT](https://github.com/jpadilla/pyjwt) as python implementation of the JSON Web Token standard\n\nFastJWT also relies on [`typing-extensions`](https://pypi.org/project/typing-extensions/) for backward compatibility _(python3.9)_\n\n> Note\n>\n> FastAPI, while required for **fastjwt**, is not declared as a dependency and must be installed prior with `pip install fastapi`\n\n### Install\n\n```shell\n# With pip\npip install fastjwt\n# With poetry\npoetry add fastjwt\n# With pipenv\npipenv install fastjwt\n```\n\n## Example\n\n```py\nfrom fastapi import FastAPI, Depends\nfrom fastjwt import FastJWT\n\napp = FastAPI()\nsecurity = FastJWT()\n\n@app.get('/login')\ndef login():\n    return security.create_access_token(uid='foo')\n\n@app.get('/protected', dependencies=[Depends(security.access_token_required())])\ndef protected():\n    return \"This is a protected endpoint\"\n```\n\n## Development\n\n> <span style=\"color:orange;\">**WORK IN PROGRESS**</span>\n>\n> The development guide is not available yet\n\n## Contributing\n\n> <span style=\"color:orange;\">**WORK IN PROGRESS**</span>\n>\n> The contribution guide is not available yet\n\n## License\n\nThis project is open source under [MIT License](https://github.com/ocarinow/fastjwt/blob/main/LICENSE)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "FastAPI Plugin for reusable JWT Authentication Management",
    "version": "0.4.1",
    "project_urls": {
        "Homepage": "https://ocarinow.github.io/fastjwt/",
        "Repository": "https://github.com/ocarinow/fastjwt"
    },
    "split_keywords": [
        "fastapi",
        "jwt",
        "json-web-token",
        "authentication",
        "security",
        "api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e4769d81fcfbcfaebed16081582ca197f3c93139b1486070bb68a076566c9eec",
                "md5": "cc3a0c389206947edeea50f7c8ff3938",
                "sha256": "71d0277bc63458b869cc93e38f0e10a8d1b998501ed8cb6875634344cb5ab1bb"
            },
            "downloads": -1,
            "filename": "fastjwt-0.4.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cc3a0c389206947edeea50f7c8ff3938",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 22646,
            "upload_time": "2024-03-07T22:41:49",
            "upload_time_iso_8601": "2024-03-07T22:41:49.038447Z",
            "url": "https://files.pythonhosted.org/packages/e4/76/9d81fcfbcfaebed16081582ca197f3c93139b1486070bb68a076566c9eec/fastjwt-0.4.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "373e4ca625d601b168b4c87553455afd74d520f2777a41a7b5fa7950ef6180bd",
                "md5": "1a5f325aa10f18b2b2643b4570f7afff",
                "sha256": "032b644bb3df8b012ccc6b20284989752e866525a9a5bafa49d93c55abf7ee9e"
            },
            "downloads": -1,
            "filename": "fastjwt-0.4.1.tar.gz",
            "has_sig": false,
            "md5_digest": "1a5f325aa10f18b2b2643b4570f7afff",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 19850,
            "upload_time": "2024-03-07T22:41:50",
            "upload_time_iso_8601": "2024-03-07T22:41:50.172965Z",
            "url": "https://files.pythonhosted.org/packages/37/3e/4ca625d601b168b4c87553455afd74d520f2777a41a7b5fa7950ef6180bd/fastjwt-0.4.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-07 22:41:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ocarinow",
    "github_project": "fastjwt",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "3.6.2"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "22.2.0"
                ]
            ]
        },
        {
            "name": "black",
            "specs": [
                [
                    "==",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "bleach",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2022.12.7"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.15.1"
                ]
            ]
        },
        {
            "name": "cfgv",
            "specs": [
                [
                    "==",
                    "3.3.1"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "2.0.12"
                ]
            ]
        },
        {
            "name": "click-log",
            "specs": [
                [
                    "==",
                    "0.4.0"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.1.3"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "coverage",
            "specs": [
                [
                    "==",
                    "7.2.1"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "39.0.1"
                ]
            ]
        },
        {
            "name": "dateparser",
            "specs": [
                [
                    "==",
                    "1.1.7"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "distlib",
            "specs": [
                [
                    "==",
                    "0.3.6"
                ]
            ]
        },
        {
            "name": "docstr-coverage",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "docutils",
            "specs": [
                [
                    "==",
                    "0.19"
                ]
            ]
        },
        {
            "name": "dotty-dict",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    "==",
                    "0.92.0"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.9.0"
                ]
            ]
        },
        {
            "name": "flake8-html",
            "specs": [
                [
                    "==",
                    "0.4.3"
                ]
            ]
        },
        {
            "name": "flake8",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "genbadge",
            "specs": [
                [
                    "==",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "ghp-import",
            "specs": [
                [
                    "==",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "gitdb",
            "specs": [
                [
                    "==",
                    "4.0.10"
                ]
            ]
        },
        {
            "name": "gitpython",
            "specs": [
                [
                    "==",
                    "3.1.31"
                ]
            ]
        },
        {
            "name": "griffe",
            "specs": [
                [
                    "==",
                    "0.25.5"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "identify",
            "specs": [
                [
                    "==",
                    "2.5.18"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.4"
                ]
            ]
        },
        {
            "name": "importlib-metadata",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "iniconfig",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "invoke",
            "specs": [
                [
                    "==",
                    "1.7.3"
                ]
            ]
        },
        {
            "name": "isort",
            "specs": [
                [
                    "==",
                    "5.12.0"
                ]
            ]
        },
        {
            "name": "jaraco-classes",
            "specs": [
                [
                    "==",
                    "3.2.3"
                ]
            ]
        },
        {
            "name": "jeepney",
            "specs": [
                [
                    "==",
                    "0.8.0"
                ]
            ]
        },
        {
            "name": "jinja2",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "keyring",
            "specs": [
                [
                    "==",
                    "23.13.1"
                ]
            ]
        },
        {
            "name": "markdown",
            "specs": [
                [
                    "==",
                    "3.3.7"
                ]
            ]
        },
        {
            "name": "markupsafe",
            "specs": [
                [
                    "==",
                    "2.1.2"
                ]
            ]
        },
        {
            "name": "mccabe",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "mergedeep",
            "specs": [
                [
                    "==",
                    "1.3.4"
                ]
            ]
        },
        {
            "name": "mkdocs-autorefs",
            "specs": [
                [
                    "==",
                    "0.4.1"
                ]
            ]
        },
        {
            "name": "mkdocs-material-extensions",
            "specs": [
                [
                    "==",
                    "1.1.1"
                ]
            ]
        },
        {
            "name": "mkdocs-material",
            "specs": [
                [
                    "==",
                    "9.1.1"
                ]
            ]
        },
        {
            "name": "mkdocs",
            "specs": [
                [
                    "==",
                    "1.4.2"
                ]
            ]
        },
        {
            "name": "mkdocstrings-python",
            "specs": [
                [
                    "==",
                    "0.8.3"
                ]
            ]
        },
        {
            "name": "mkdocstrings",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "mkdocstrings",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    "==",
                    "9.1.0"
                ]
            ]
        },
        {
            "name": "mypy-extensions",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "nodeenv",
            "specs": [
                [
                    "==",
                    "1.7.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "23.0"
                ]
            ]
        },
        {
            "name": "pathspec",
            "specs": [
                [
                    "==",
                    "0.11.0"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    "==",
                    "9.4.0"
                ]
            ]
        },
        {
            "name": "pkginfo",
            "specs": [
                [
                    "==",
                    "1.9.6"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "pluggy",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "pre-commit",
            "specs": [
                [
                    "==",
                    "3.1.1"
                ]
            ]
        },
        {
            "name": "pycodestyle",
            "specs": [
                [
                    "==",
                    "2.10.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.21"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    "==",
                    "1.10.5"
                ]
            ]
        },
        {
            "name": "pyflakes",
            "specs": [
                [
                    "==",
                    "3.0.1"
                ]
            ]
        },
        {
            "name": "pygments",
            "specs": [
                [
                    "==",
                    "2.14.0"
                ]
            ]
        },
        {
            "name": "pyjwt",
            "specs": [
                [
                    "==",
                    "2.6.0"
                ]
            ]
        },
        {
            "name": "pymdown-extensions",
            "specs": [
                [
                    "==",
                    "9.10"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    "==",
                    "0.20.3"
                ]
            ]
        },
        {
            "name": "pytest-cov",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "7.2.2"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.8.2"
                ]
            ]
        },
        {
            "name": "python-gitlab",
            "specs": [
                [
                    "==",
                    "3.13.0"
                ]
            ]
        },
        {
            "name": "python-semantic-release",
            "specs": [
                [
                    "==",
                    "7.33.2"
                ]
            ]
        },
        {
            "name": "pytz-deprecation-shim",
            "specs": [
                [
                    "==",
                    "0.1.0.post0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2022.7.1"
                ]
            ]
        },
        {
            "name": "pywin32-ctypes",
            "specs": [
                [
                    "==",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "pyyaml-env-tag",
            "specs": [
                [
                    "==",
                    "0.1"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    "==",
                    "6.0"
                ]
            ]
        },
        {
            "name": "readme-renderer",
            "specs": [
                [
                    "==",
                    "37.3"
                ]
            ]
        },
        {
            "name": "regex",
            "specs": [
                [
                    "==",
                    "2022.10.31"
                ]
            ]
        },
        {
            "name": "requests-toolbelt",
            "specs": [
                [
                    "==",
                    "0.10.1"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.27.1"
                ]
            ]
        },
        {
            "name": "rfc3986",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "secretstorage",
            "specs": [
                [
                    "==",
                    "3.3.3"
                ]
            ]
        },
        {
            "name": "semver",
            "specs": [
                [
                    "==",
                    "2.13.0"
                ]
            ]
        },
        {
            "name": "setuptools-scm",
            "specs": [
                [
                    "==",
                    "7.1.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "67.4.0"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "smmap",
            "specs": [
                [
                    "==",
                    "5.0.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "starlette",
            "specs": [
                [
                    "==",
                    "0.25.0"
                ]
            ]
        },
        {
            "name": "tomli",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "tomlkit",
            "specs": [
                [
                    "==",
                    "0.11.6"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.64.1"
                ]
            ]
        },
        {
            "name": "twine",
            "specs": [
                [
                    "==",
                    "3.8.0"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.5.0"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2022.7"
                ]
            ]
        },
        {
            "name": "tzlocal",
            "specs": [
                [
                    "==",
                    "4.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "1.26.14"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "virtualenv",
            "specs": [
                [
                    "==",
                    "20.20.0"
                ]
            ]
        },
        {
            "name": "watchdog",
            "specs": [
                [
                    "==",
                    "2.3.1"
                ]
            ]
        },
        {
            "name": "webencodings",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "wheel",
            "specs": [
                [
                    "==",
                    "0.38.4"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.15.0"
                ]
            ]
        }
    ],
    "lcname": "fastjwt"
}
        
Elapsed time: 2.47217s