├── .editorconfig ├── .github ├── dependabot.yml └── workflows │ ├── deploy.yml │ ├── misspell.yml │ └── test.yml ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docs ├── .pages ├── alternatives.md ├── compatibility │ ├── -OO.md │ ├── attrs.md │ ├── dataclasses.md │ ├── flake8-docstrings.md │ ├── pydantic.md │ ├── rich.md │ └── self.md ├── css │ └── custom.css ├── docstring.md ├── examples │ ├── attrs_exception.py │ ├── docstring.py │ ├── not_renderable.py │ ├── open-the-pod-bay-doors.py │ ├── pydantic_exception.py │ ├── recursion.py │ ├── rich-markdown.py │ └── wizardry.py ├── fallback.md ├── images │ ├── quotes-black.png │ ├── quotes-black.svg │ ├── quotes.svg │ └── workflow.png ├── index.md ├── reference │ ├── documented-error.md │ └── documented.md ├── roadmap.yaml ├── templating.md └── try-except.md ├── documented ├── __init__.py ├── contrib │ ├── __init__.py │ └── rich_markdown.py ├── documented.py ├── error.py └── untouchable.py ├── jeeves.py ├── macros.py ├── mkdocs.yml ├── poetry.lock ├── pyproject.toml └── tests ├── __init__.py ├── common.py ├── conftest.py ├── test_documented.py ├── test_error.py ├── test_rich.py └── test_untouchable.py /.editorconfig: -------------------------------------------------------------------------------- 1 | # Check http://editorconfig.org for more information 2 | # This is the main config file for this project: 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | insert_final_newline = true 9 | indent_style = space 10 | indent_size = 2 11 | trim_trailing_whitespace = true 12 | 13 | [*.{py, pyi}] 14 | indent_style = space 15 | indent_size = 4 16 | 17 | [Makefile] 18 | indent_style = tab 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "pip" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | # https://blog.elmah.io/deploying-a-mkdocs-documentation-site-with-github-actions/ 2 | on: 3 | push: 4 | branches: [master] 5 | 6 | jobs: 7 | build: 8 | name: Deploy to GitHub pages 9 | runs-on: ubuntu-22.04 10 | steps: 11 | - uses: actions/checkout@v2 12 | - uses: actions/setup-python@v4 13 | with: 14 | python-version: 3.11 15 | - run: pip install -q poetry 16 | - run: poetry config virtualenvs.create false --local 17 | - run: poetry install 18 | - run: mkdocs gh-deploy --force --clean --verbose 19 | -------------------------------------------------------------------------------- /.github/workflows/misspell.yml: -------------------------------------------------------------------------------- 1 | name: misspell 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' 6 | 7 | jobs: 8 | build: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: sobolevn/misspell-fixer-action@0.1.0 15 | - uses: peter-evans/create-pull-request@v2.4.4 16 | with: 17 | token: ${{ secrets.GITHUB_TOKEN }} 18 | commit-message: 'Fixes by misspell-fixer' 19 | title: 'Typos fix by misspell-fixer' 20 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 12 | cancel-in-progress: true 13 | 14 | permissions: 15 | contents: read 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | strategy: 21 | matrix: 22 | python-version: ['3.10', '3.11'] 23 | 24 | steps: 25 | - uses: actions/checkout@v3 26 | - name: Set up Python ${{ matrix.python-version }} 27 | uses: actions/setup-python@v4 28 | with: 29 | python-version: ${{ matrix.python-version }} 30 | 31 | - name: Install poetry 32 | run: | 33 | pip install -U pip poetry 34 | # Adding `poetry` to `$PATH`: 35 | echo "$HOME/.poetry/bin" >> $GITHUB_PATH 36 | - name: Install dependencies 37 | run: | 38 | poetry config virtualenvs.in-project true 39 | poetry install 40 | - name: Run checks 41 | run: poetry run j test 42 | 43 | # Upload coverage to codecov: https://codecov.io/ 44 | - name: Upload coverage to Codecov 45 | uses: codecov/codecov-action@v3 46 | with: 47 | file: ./coverage.xml 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #### joe made this: http://goel.io/joe 2 | #### macos #### 3 | # General 4 | *.DS_Store 5 | .AppleDouble 6 | .LSOverride 7 | 8 | # Icon must end with two \r 9 | Icon 10 | 11 | 12 | # Thumbnails 13 | ._* 14 | 15 | # Files that might appear in the root of a volume 16 | .DocumentRevisions-V100 17 | .fseventsd 18 | .Spotlight-V100 19 | .TemporaryItems 20 | .Trashes 21 | .VolumeIcon.icns 22 | .com.apple.timemachine.donotpresent 23 | 24 | # Directories potentially created on remote AFP share 25 | .AppleDB 26 | .AppleDesktop 27 | Network Trash Folder 28 | Temporary Items 29 | .apdisk 30 | #### linux #### 31 | *~ 32 | 33 | # temporary files which can be created if a process still has a handle open of a deleted file 34 | .fuse_hidden* 35 | 36 | # KDE directory preferences 37 | .directory 38 | 39 | # Linux trash folder which might appear on any partition or disk 40 | .Trash-* 41 | 42 | # .nfs files are created when an open file is removed but is still being accessed 43 | .nfs* 44 | #### windows #### 45 | # Windows thumbnail cache files 46 | Thumbs.db 47 | ehthumbs.db 48 | ehthumbs_vista.db 49 | 50 | # Dump file 51 | *.stackdump 52 | 53 | # Folder config file 54 | Desktop.ini 55 | 56 | # Recycle Bin used on file shares 57 | $RECYCLE.BIN/ 58 | 59 | # Windows Installer files 60 | *.cab 61 | *.msi 62 | *.msm 63 | *.msp 64 | 65 | # Windows shortcuts 66 | *.lnk 67 | #### python #### 68 | # Byte-compiled / optimized / DLL files 69 | __pycache__/ 70 | *.py[cod] 71 | *$py.class 72 | 73 | # C extensions 74 | *.so 75 | 76 | # Distribution / packaging 77 | .Python 78 | build/ 79 | develop-eggs/ 80 | dist/ 81 | downloads/ 82 | eggs/ 83 | .eggs/ 84 | lib/ 85 | lib64/ 86 | parts/ 87 | sdist/ 88 | var/ 89 | wheels/ 90 | *.egg-info/ 91 | .installed.cfg 92 | *.egg 93 | 94 | # PyInstaller 95 | # Usually these files are written by a python script from a template 96 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 97 | *.manifest 98 | *.spec 99 | 100 | # Installer logs 101 | pip-log.txt 102 | pip-delete-this-directory.txt 103 | 104 | # Unit test / coverage reports 105 | htmlcov/ 106 | .tox/ 107 | .coverage 108 | .coverage.* 109 | .cache 110 | nosetests.xml 111 | coverage.xml 112 | *.cover 113 | .hypothesis/ 114 | 115 | # Translations 116 | *.mo 117 | *.pot 118 | 119 | # Django stuff: 120 | *.log 121 | local_settings.py 122 | 123 | # Flask stuff: 124 | instance/ 125 | .webassets-cache 126 | 127 | # Scrapy stuff: 128 | .scrapy 129 | 130 | # Sphinx documentation 131 | docs/_build/ 132 | 133 | # PyBuilder 134 | target/ 135 | 136 | # Jupyter Notebook 137 | .ipynb_checkpoints 138 | 139 | # celery beat schedule file 140 | celerybeat-schedule 141 | 142 | # SageMath parsed files 143 | *.sage.py 144 | 145 | # Environments 146 | .env 147 | .venv 148 | env/ 149 | venv/ 150 | ENV/ 151 | 152 | # Spyder project settings 153 | .spyderproject 154 | .spyproject 155 | 156 | # Rope project settings 157 | .ropeproject 158 | 159 | # mkdocs documentation 160 | /site 161 | 162 | # mypy 163 | .mypy_cache/ 164 | 165 | #### jetbrains #### 166 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 167 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 168 | .idea/ 169 | 170 | # CMake 171 | cmake-build-debug/ 172 | 173 | # Mongo Explorer plugin: 174 | .idea/**/mongoSettings.xml 175 | 176 | ## File-based project format: 177 | *.iws 178 | 179 | ## Plugin-specific files: 180 | 181 | # IntelliJ 182 | /out/ 183 | 184 | # mpeltonen/sbt-idea plugin 185 | .idea_modules/ 186 | 187 | # JIRA plugin 188 | atlassian-ide-plugin.xml 189 | 190 | .python-version 191 | .pytest_cache 192 | .flakeheaven_cache 193 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Version history 2 | 3 | We follow [Semantic Versions](https://semver.org/). 4 | 5 | ## Version 0.1.1 6 | 7 | - Added `.strip('\n')` to avoid extra newlines in the printed message. 8 | 9 | ## Version 0.1.0 10 | 11 | - Initial release 12 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | 4 | ## Dependencies 5 | 6 | We use [poetry](https://github.com/python-poetry/poetry) to manage the dependencies. 7 | 8 | To install them you would need to run `install` command: 9 | 10 | ```bash 11 | poetry install 12 | ``` 13 | 14 | To activate your `virtualenv` run `poetry shell`. 15 | 16 | 17 | ## One magic command 18 | 19 | Run `make test` to run everything we have! 20 | 21 | 22 | ## Tests 23 | 24 | We use `pytest` and `flake8` for quality control. 25 | We also use [wemake_python_styleguide](https://github.com/wemake-services/wemake-python-styleguide) to enforce the code quality. 26 | 27 | To run all tests: 28 | 29 | ```bash 30 | pytest 31 | ``` 32 | 33 | To run linting: 34 | 35 | ```bash 36 | flake8 . 37 | ``` 38 | Keep in mind: default virtual environment folder excluded by flake8 style checking is `.venv`. 39 | If you want to customize this parameter, you should do this in `setup.cfg`. 40 | These steps are mandatory during the CI. 41 | 42 | 43 | ## Type checks 44 | 45 | We use `mypy` to run type checks on our code. 46 | To use it: 47 | 48 | ```bash 49 | mypy documented tests/*.py 50 | ``` 51 | 52 | This step is mandatory during the CI. 53 | 54 | 55 | ## Submitting your code 56 | 57 | We use [trunk based](https://trunkbaseddevelopment.com/) 58 | development (we also sometimes call it `wemake-git-flow`). 59 | 60 | What the point of this method? 61 | 62 | 1. We use protected `master` branch, 63 | so the only way to push your code is via pull request 64 | 2. We use issue branches: to implement a new feature or to fix a bug 65 | create a new branch named `issue-$TASKNUMBER` 66 | 3. Then create a pull request to `master` branch 67 | 4. We use `git tag`s to make releases, so we can track what has changed 68 | since the latest release 69 | 70 | So, this way we achieve an easy and scalable development process 71 | which frees us from merging hell and long-living branches. 72 | 73 | In this method, the latest version of the app is always in the `master` branch. 74 | 75 | ### Before submitting 76 | 77 | Before submitting your code please do the following steps: 78 | 79 | 1. Run `pytest` to make sure everything was working before 80 | 2. Add any changes you want 81 | 3. Add tests for the new changes 82 | 4. Edit documentation if you have changed something significant 83 | 5. Update `CHANGELOG.md` with a quick summary of your changes 84 | 6. Run `pytest` again to make sure it is still working 85 | 7. Run `mypy` to ensure that types are correct 86 | 8. Run `flake8` to ensure that style is correct 87 | 88 | 89 | ## Other help 90 | 91 | You can contribute by spreading a word about this library. 92 | It would also be a huge contribution to write 93 | a short article on how you are using this project. 94 | You can also share your best practices with us. 95 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | Copyright (c) 2022 Anatoly Scherbakov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # documented 2 | 3 | [![Python Version](https://img.shields.io/pypi/pyversions/documented.svg)](https://pypi.org/project/documented/) 4 | [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide) 5 | ![PyPI - License](https://img.shields.io/pypi/l/documented) 6 | 7 | Templated docstrings for Python classes. 8 | 9 | ## Features 10 | 11 | - Describe your business logic in docstrings of your classes and exceptions; 12 | - When printing an object or an exception, the library will substitute the placeholders in the docstring text with runtime values, 13 | - And you (or your user) will see a human-readable text. 14 | 15 | ## Installation 16 | 17 | ```bash 18 | pip install documented 19 | ``` 20 | 21 | 22 | ## Example 23 | 24 | ```python 25 | from dataclasses import dataclass 26 | from documented import DocumentedError 27 | 28 | 29 | @dataclass 30 | class InsufficientWizardryLevel(DocumentedError): 31 | """ 32 | 🧙 Your level of wizardry is insufficient ☹ 33 | 34 | Spell: {self.spell} 35 | Minimum level required: {self.required_level} 36 | Actual level: {self.actual_level} {self.comment} 37 | 38 | Unseen University will be happy to assist in your training! 🎓 39 | """ 40 | 41 | spell: str 42 | required_level: int 43 | actual_level: int 44 | 45 | @property 46 | def comment(self) -> str: 47 | if self.actual_level <= 0: 48 | return '(You are Rincewind, right? Hi!)' 49 | else: 50 | return '' 51 | 52 | 53 | raise InsufficientWizardryLevel( 54 | spell='Animal transformation', 55 | required_level=8, 56 | actual_level=0, 57 | ) 58 | ``` 59 | 60 | which prints: 61 | 62 | ``` 63 | --------------------------------------------------------------------- 64 | InsufficientWizardryLevel Traceback (most recent call last) 65 | in 66 | 27 67 | 28 68 | ---> 29 raise InsufficientWizardryLevel( 69 | 30 spell='Animal transformation', 70 | 31 required_level=8, 71 | 72 | InsufficientWizardryLevel: 73 | 🧙 Your level of wizardry is insufficient ☹ 74 | 75 | Spell: Animal transformation 76 | Minimum level required: 8 77 | Actual level: 0 (You are Rincewind, right? Hi!) 78 | 79 | Unseen University will be happy to assist in your training! 🎓 80 | ``` 81 | 82 | For more examples, see: https://anatoly-scherbakov.github.io/documented/ 83 | 84 | This project was generated with [`wemake-python-package`](https://github.com/wemake-services/wemake-python-package). 85 | -------------------------------------------------------------------------------- /docs/.pages: -------------------------------------------------------------------------------- 1 | nav: 2 | - index.md 3 | - docstring.md 4 | - templating.md 5 | - try-except.md 6 | - fallback.md 7 | - ... 8 | -------------------------------------------------------------------------------- /docs/alternatives.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔀 Alternatives 3 | hide: 4 | - toc 5 | --- 6 | 7 | # 🔀 Alternatives 8 | 9 | !!! info inline end "Know any other alternative?" 10 | [:heavy_plus_sign: Submit an issue!](https://github.com/anatoly-scherbakov/documented/issues/new){ .md-button .md-button--primary } 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 25 | 26 | 27 | 28 | 29 |
LanguageNotes
23 | [`thiserror`](https://crates.io/crates/thiserror) 24 | :simple-rust: RustFormats error messages just like `documented` does
30 | 31 | -------------------------------------------------------------------------------- /docs/compatibility/-OO.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "🔴 python -OO" 3 | --- 4 | 5 | As [the reference](https://docs.python.org/3/using/cmdline.html#cmdoption-OO) states, `-OO` mode will discard the docstrings. 6 | 7 | ```bash 8 | python -OO script.py 9 | ``` 10 | 11 | {{ 12 | run_python_script("examples/wizardry.py", 13 | annotations=[ 14 | "Usage of `dataclasses` is not required but helps alleviate boilerplate.", 15 | "Docstring is used to render the exception. More than that, you can render fields of the exception instance in it using `{self.something}` placeholders.", 16 | "You cannot call methods of the exception instance. But you can refer to properties to help generate dynamic content." 17 | ], 18 | args=['-OO'] 19 | ) }} 20 | 21 | As you can see, the [Fallback `__repr__` mode](/fallback/) is used in this case. 22 | -------------------------------------------------------------------------------- /docs/compatibility/attrs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🟢 attrs 3 | --- 4 | 5 | {{ run_python_script("examples/attrs_exception.py") }} 6 | -------------------------------------------------------------------------------- /docs/compatibility/dataclasses.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🟢 dataclasses 3 | --- 4 | 5 | I am mostly wrapping subclasses of `DocumentedError` into `@dataclass` decorator. See an example on the [home page](/) of the documentation site. 6 | -------------------------------------------------------------------------------- /docs/compatibility/flake8-docstrings.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🟢 flake8-docstrings 3 | --- 4 | 5 | Verify the docstrings you write with [flake8-docstrings](https://github.com/PyCQA/flake8-docstrings). 6 | -------------------------------------------------------------------------------- /docs/compatibility/pydantic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🟡 pydantic 3 | hide: 4 | - toc 5 | --- 6 | 7 | !!! info inline end "Idea" 8 | [:simple-github: pydantic/pydantic#1875](https://github.com/pydantic/pydantic/issues/1875) 9 | 10 | * :slight_frown: Pydantic models will raise an error if to try to inherit them from `Exception` and then `raise`, 11 | * :slight_smile: but we can use Pydantic `dataclasses` instead. 12 | 13 | {{ run_python_script("examples/pydantic_exception.py") }} 14 | -------------------------------------------------------------------------------- /docs/compatibility/rich.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🟡 rich 3 | hide: 4 | - toc 5 | --- 6 | 7 | ## 🟢 `Documented` 8 | 9 | {{ run_python_script("examples/rich-markdown.py") }} 10 | 11 | This will render the docstring as Markdown in the console. 12 | 13 | ## 🟡 `DocumentedError` 14 | 15 | !!! info inline end "See related thread" 16 | [:simple-github: textualize/rich#2619](https://github.com/Textualize/rich/issues/2619) 17 | 18 | * :slight_frown: I haven't found a way to integrate [:simple-github: rich](https://github.com/textualize/rich/) with `documented` directly, to render beautiful exceptions with console markup or Markdown text in them right in the traceback. 19 | 20 | * :slight_smile: However, this can always be done manually: 21 | * `except` the error, 22 | * and `rich.print()` it. 23 | -------------------------------------------------------------------------------- /docs/compatibility/self.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "🔴 {self}" 3 | --- 4 | 5 | Using plain `{self}` in the docstring will cause a recursion. As well as something like this: 6 | 7 | {{ run_python_script("examples/recursion.py") }} 8 | 9 | !!! warning "So please do not do that" 10 | We could have filtered out the plain call to `{self}` but we're unable to do so for more involved cases as illustrated above, so for now we are keeping it as it is. 11 | -------------------------------------------------------------------------------- /docs/css/custom.css: -------------------------------------------------------------------------------- 1 | /*.side-by-side { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 1em; 5 | } 6 | 7 | .side-by-side > .admonition { 8 | flex: 1; 9 | } 10 | 11 | @media (max-width: 768px) { 12 | .side-by-side { 13 | flex-direction: column; 14 | } 15 | } 16 | */ 17 | 18 | .side-by-side { 19 | display: grid; 20 | grid-template-columns: 1fr 1fr; 21 | gap: 1em; 22 | } 23 | 24 | .side-by-side .admonition .s2 { 25 | word-wrap:break-word !important; 26 | } 27 | 28 | @media (max-width: 768px) { 29 | .side-by-side { 30 | grid-template-columns: 1fr; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /docs/docstring.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📝 """Docstring""" 3 | hide: 4 | - toc 5 | --- 6 | 7 | # 📝 `"""Docstring"""` 8 | 9 | Having installed `documented`, you can use `DocumentedError` as base for your custom exception classes. The immediate 10 | effect of that is that raising these exceptions will print their docstrings in the stack trace. 11 | 12 | {{ run_python_script("examples/docstring.py") }} 13 | 14 | ## Styling Recommendations 15 | 16 | * Create your own exception classes in terms of your domain, to play a part in your business logic, instead of using built-in `Exception` or `ValueError`. 17 | * Refrain from using the word `Exception` or `Error` in their names. 18 | * A good IDE can convey the information that something is an exception; 19 | * Even discarding that, seeing `raise FooBarBaz` is sufficient to understand what kind of guy `FooBarBaz` is. 20 | 21 | ### :slight_smile: Good 22 | 23 | * :white_check_mark: `BalanceInsufficient` 24 | * :white_check_mark: `PlanetNotFound` 25 | * :white_check_mark: `TetOffline` 26 | * :white_check_mark: `OrderDeclined` 27 | 28 | ### :slight_frown: Not so good 29 | 30 | * :no_entry_sign: `BalanceInsufficientError` 31 | * :no_entry_sign: `PlanetNotFoundException` 32 | * :no_entry_sign: `CatastrophicalError` 33 | * :no_entry_sign: `UnknownError` 34 | -------------------------------------------------------------------------------- /docs/examples/attrs_exception.py: -------------------------------------------------------------------------------- 1 | from attrs import define 2 | 3 | from documented import DocumentedError 4 | 5 | 6 | @define 7 | class DeathStarHasExploded(DocumentedError): 8 | """ 9 | This Death Star has exploded. 10 | 11 | You will have to build a new one, {self.user} 12 | """ 13 | 14 | user: str 15 | 16 | 17 | raise DeathStarHasExploded(user='Darth') 18 | -------------------------------------------------------------------------------- /docs/examples/docstring.py: -------------------------------------------------------------------------------- 1 | from documented import DocumentedError 2 | 3 | 4 | class HALHasGoneCrazy(DocumentedError): 5 | """ 6 | Something is amiss. 7 | 8 | It would seem that HAL9000 has gone crazy! 9 | """ 10 | 11 | raise HALHasGoneCrazy() 12 | -------------------------------------------------------------------------------- /docs/examples/not_renderable.py: -------------------------------------------------------------------------------- 1 | from documented import DocumentedError 2 | 3 | 4 | class NotRenderable(DocumentedError): 5 | """ 6 | This exception is not renderable. 7 | 8 | {self.no_hope} 9 | """ 10 | 11 | @property 12 | def no_hope(self): 13 | return str(1 / 0) 14 | 15 | 16 | raise NotRenderable() 17 | -------------------------------------------------------------------------------- /docs/examples/open-the-pod-bay-doors.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | from documented import Documented, DocumentedError 4 | 5 | 6 | @dataclass 7 | class PodBayDoorsStillClosed(DocumentedError): 8 | """ 9 | I’m sorry, {self.user_name}. 10 | 11 | I’m afraid I can’t do that. 12 | """ 13 | 14 | user_name: str 15 | 16 | 17 | class OpenThePodBayDoors(Documented): 18 | """Open the pod bay doors please, HAL.""" 19 | 20 | 21 | print(OpenThePodBayDoors()) 22 | raise PodBayDoorsStillClosed(user_name='Dave') 23 | -------------------------------------------------------------------------------- /docs/examples/pydantic_exception.py: -------------------------------------------------------------------------------- 1 | from pydantic.dataclasses import dataclass as pydantic_dataclass 2 | 3 | from documented import DocumentedError 4 | 5 | 6 | @pydantic_dataclass 7 | class PydanticError(DocumentedError): 8 | """ 9 | Incorrect answer! 10 | 11 | (To the Question of Life, Universe, and Everything.) 12 | 13 | - Answer given: {self.answer} 14 | - Correct answer: indubitably 42. 15 | """ 16 | 17 | answer: str 18 | 19 | 20 | raise PydanticError(answer='bebebe') 21 | -------------------------------------------------------------------------------- /docs/examples/recursion.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from documented import DocumentedError 4 | 5 | sys.setrecursionlimit(30) 6 | 7 | 8 | class Recursion(DocumentedError): 9 | """ 10 | This exception is a bugger. 11 | 12 | It will crash when rendering {self.recursive_property}. 13 | """ 14 | 15 | @property 16 | def recursive_property(self): 17 | return self 18 | 19 | 20 | raise Recursion() 21 | -------------------------------------------------------------------------------- /docs/examples/rich-markdown.py: -------------------------------------------------------------------------------- 1 | import rich 2 | from documented import Documented 3 | 4 | 5 | class MyMessage(Documented): 6 | """ 7 | # This is a Markdown formatted message. 8 | 9 | * _One_, 10 | * *Two*, 11 | * `Three` 12 | 13 | and **more** features of Markdown 14 | 15 | > are supported. 16 | """ 17 | 18 | 19 | rich.print(MyMessage()) 20 | -------------------------------------------------------------------------------- /docs/examples/wizardry.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from documented import DocumentedError 3 | 4 | 5 | @dataclass # (1)! 6 | class InsufficientWizardryLevel(DocumentedError): 7 | """ 8 | 🧙 Your level of wizardry is insufficient ☹ 9 | 10 | Spell: {self.spell} 11 | Minimum level required: {self.required_level} 12 | Actual level: {self.actual_level} {self.comment} 13 | 14 | Unseen University will be happy to assist in your training! 🎓 15 | """ # (2)! 16 | 17 | spell: str 18 | required_level: int 19 | actual_level: int 20 | 21 | @property # (3)! 22 | def comment(self) -> str: 23 | if self.actual_level <= 0: 24 | return '(You are Rincewind, right? Hi!)' 25 | else: 26 | return '' 27 | 28 | 29 | raise InsufficientWizardryLevel( 30 | spell='Animal transformation', 31 | required_level=8, 32 | actual_level=0, 33 | ) 34 | -------------------------------------------------------------------------------- /docs/fallback.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔙 Fallback mode 3 | --- 4 | 5 | If either: 6 | 7 | * the docstring for a `Documented` class is not provided, 8 | * or it is stripped by the [`-OO`](/compatibility/-OO/) mode 9 | 10 | then we will output the object's [`repr()`](https://docs.python.org/3/library/functions.html#repr) instead. 11 | -------------------------------------------------------------------------------- /docs/images/quotes-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anatoly-scherbakov/documented/d166ffffb76677a471a266c17e881bf4c1871686/docs/images/quotes-black.png -------------------------------------------------------------------------------- /docs/images/quotes-black.svg: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/quotes.svg: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anatoly-scherbakov/documented/d166ffffb76677a471a266c17e881bf4c1871686/docs/images/workflow.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: documented 3 | hide: 4 | - toc 5 | --- 6 | 7 | # `documented` 8 | 9 | [![Python Version](https://img.shields.io/pypi/pyversions/documented.svg)](https://pypi.org/project/documented/) 10 | [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide) 11 | ![PyPI - License](https://img.shields.io/pypi/l/documented) 12 | 13 | Templated docstrings for Python classes. 14 | 15 | ## Example 16 | 17 | {{ run_python_script("examples/open-the-pod-bay-doors.py") }} 18 | 19 | ## Installation 20 | 21 | `documented` is on [:simple-pypi: PyPI](https://pypi.org/project/documented). 22 | 23 | === "pip" 24 | ```bash 25 | pip install documented 26 | ``` 27 | 28 | === ":simple-poetry: poetry" 29 | ```bash 30 | poetry add documented 31 | ``` 32 | 33 | === "pipenv" 34 | ```bash 35 | pipenv install documented 36 | ``` 37 | 38 | === "pdm" 39 | ```bash 40 | pdm add documented 41 | ``` 42 | 43 | === ":simple-condaforge: conda" 44 | 45 | ```bash 46 | conda install -c conda-forge documented 47 | ``` 48 | 49 | 50 | ## :octicons-workflow-24: Flow 51 | 52 | ```mermaid 53 | graph TD 54 | docstring("Class 📝 docstring") --> dedent("↤ dedent") 55 | dedent --> C("✏️ Interpolate
{self.placeholders}") 56 | C --> str("__str__()") 57 | str -- "for
DocumentedError" --> raise("💥 raise") 58 | str -- "for
Documented" --> print("🖨️ print | log") 59 | print --> rich("as Markdown → console
with 🖥️ rich") 60 | raise --> try("🏀 try … except") 61 | raise -- Stacktrace --> print 62 | try --> print 63 | 64 | style raise stroke:#CC0000 65 | click dedent "https://docs.python.org/3/library/textwrap.html#textwrap.dedent" 66 | click C "templating/" 67 | click rich "compatibility/rich/" 68 | click str "https://docs.python.org/3/reference/datamodel.html#object.__str__" 69 | click try "try-except/" 70 | click docstring "docstring/" 71 | 72 | ``` 73 | 74 | ## :package: Used by 75 | 76 | The asterisk :material-asterisk: below denotes projects which are mine :slight_smile: 77 | 78 | !!! info inline "[iolanta](https://iolanta.tech)" 79 | Linked Data workspace :material-asterisk: 80 | 81 | !!! info inline "[jeeves](https://jeeves.sh)" 82 | Pythonic alternative to Make :material-asterisk: 83 | 84 | !!! info inline "Know more?" 85 | [:heavy_plus_sign: Submit an issue!](https://github.com/anatoly-scherbakov/documented/issues/new) 86 | 87 |
88 | 89 | ## :material-phone-in-talk: Let's talk 90 | 91 | !!! info inline "Bug? Feature request?" 92 | [:heavy_plus_sign: Submit an issue!](https://github.com/anatoly-scherbakov/documented/issues/new) 93 | 94 | !!! info inline "Anything else?" 95 | See my site: [:material-web: yeti.sh](https://yeti.sh) 96 | 97 |
98 | 99 | ## :fontawesome-regular-paper-plane: Publications 100 | 101 | * [`documented`: make docstrings in your exceptions work](https://dev.to/anatolyscherbakov/documented-make-docstrings-in-your-exceptions-work-2kcf) 102 | -------------------------------------------------------------------------------- /docs/reference/documented-error.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: DocumentedError 3 | --- 4 | 5 | ::: documented.DocumentedError 6 | -------------------------------------------------------------------------------- /docs/reference/documented.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Documented 3 | --- 4 | 5 | !!! note "Base class" 6 | You can inherit your classes from `Documented`, it won't be an exception like it is the case for `DocumentedError` but it will still render your docstring as `__str__`. I use this to catalogue messages in console applications, for example. 7 | 8 | ::: documented.Documented 9 | -------------------------------------------------------------------------------- /docs/roadmap.yaml: -------------------------------------------------------------------------------- 1 | roadmap:roadmap: 2 | - title: Submit a PR to mkdocs-macros-plugin (or what) 3 | is-blocked-by: 4 | - title: Deploy new version 5 | is-blocked-by: 6 | - title: "Create and test `DocumentedWarning` class" 7 | is-blocked-by: 8 | - title: "Are warnings still relevant? Are they not deprecated?" 9 | - title: "How can iolanta improve docs?" 10 | -------------------------------------------------------------------------------- /docs/templating.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ✏️ Templating 3 | hide: 4 | - toc 5 | --- 6 | 7 | # :octicons-project-template-24: Templating 8 | 9 | `{self.something}` templating pieces will be interpolated when rendering the exception value. 10 | 11 | {{ run_python_script("examples/open-the-pod-bay-doors.py") }} 12 | 13 | * [`textwrap.dedent()`](https://docs.python.org/3/library/textwrap.html#textwrap.dedent) is applied to the result, thus Python indentation rules do not corrupt the resulting message. 14 | * Template rendering is done using [`str.format()`](https://docs.python.org/3/library/string.html#formatspec). That function receives the object instance as `self` keyword argument. 15 | 16 | You can also access elements of lists and dicts by index, for example: `{self.countries[US]}`, but I wouldn't recommend that. Use a property instead (see below). 17 | 18 | ## Dynamic content 19 | 20 | From template, you can't call methods of the object, but you can access its fields and properties. You might find useful: 21 | 22 | * [`@property`](https://docs.python.org/3/library/functions.html#property) 23 | * or, [`@cached_property`](https://docs.python.org/3/library/functools.html#functools.cached_property) for performance 24 | * This function is only available since Python 3.8, 25 | * There is a [backport](https://pypi.org/project/cached-property) available though. 26 | 27 | ## Dataclasses 28 | 29 | Dataclasses are used in this example in order to provide the astronaut's name to the exception in the most convenient way. You can 30 | 31 | * opt out of using them if you wish, 32 | * or use [`attrs`](../compatibility/attrs/) instead, 33 | * or maybe substitute them with [pydantic dataclasses](../compatibility/pydantic/). 34 | 35 | ## Error while rendering 36 | 37 | If there is an error while rendering the exception then you will see something like this: 38 | 39 | {{ run_python_script("examples/not_renderable.py") }} 40 | -------------------------------------------------------------------------------- /docs/try-except.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🏀 try…except 3 | --- 4 | 5 | # :basketball: `try`…`except` 6 | 7 | ```mermaid 8 | graph TD 9 | catch("Why to catch an exception
you have thrown elsewhere?") -- "Catching
any exception" --> any("Log the error, maybe") 10 | catch -- "Catch specific
exception(s) only" --> flow("Use the exception
to change how the system behaves
") 11 | 12 | style flow fill:#526cfe 13 | ``` 14 | 15 | !!! info inline end "Read more on this" 16 | [:paperclip: Exceptions as Control Flow](https://blog.cerebralab.com/Exceptions_as_control_flow){ .md-button .md-button--primary } 17 | 18 | Python `except` construct allows to manage how the application behaves depending on which exception has been raised. `documented` stimulates to add fields and properties to your exception classes, which you can neatly use in `except` clauses: 19 | 20 | ```python 21 | try: 22 | hal.do_stuff() 23 | except HALHasGoneCrazy as err: 24 | if err.is_moebius_cycle: 25 | hal.turn_off() 26 | else: 27 | hal.self_check() 28 | ``` 29 | -------------------------------------------------------------------------------- /documented/__init__.py: -------------------------------------------------------------------------------- 1 | from documented.documented import Documented 2 | from documented.error import DocumentedError 3 | -------------------------------------------------------------------------------- /documented/contrib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anatoly-scherbakov/documented/d166ffffb76677a471a266c17e881bf4c1871686/documented/contrib/__init__.py -------------------------------------------------------------------------------- /documented/contrib/rich_markdown.py: -------------------------------------------------------------------------------- 1 | from documented.untouchable import Untouchable 2 | 3 | try: 4 | from rich.markdown import Markdown # noqa: WPS433 5 | except ImportError: # pragma: nocover 6 | from documented import DocumentedError # noqa: WPS433 7 | 8 | class RichNotInstalled(DocumentedError): 9 | """ 10 | The `rich` library is not installed. 11 | 12 | There was an attempt to visualize a `Documented` object as Markdown via 13 | `rich` library, but that one is not installed. Perhaps you would want 14 | to do: 15 | 16 | ``` 17 | pip install rich 18 | ``` 19 | """ 20 | 21 | Markdown = Untouchable( # type: ignore # noqa: WPS440 22 | exception=RichNotInstalled(), 23 | ) 24 | -------------------------------------------------------------------------------- /documented/documented.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import textwrap 3 | from documented.contrib.rich_markdown import Markdown 4 | 5 | logger = logging.getLogger(__name__) 6 | 7 | 8 | class Documented: 9 | """Class with a templated docstring.""" 10 | 11 | def __str__(self) -> str: 12 | """Format and return the docstring.""" 13 | template = self.__docstring_template() 14 | 15 | # This call can access properties of `self` and, therefore, execute 16 | # user's arbitrary code. We have to catch any exceptions that 17 | # may ensue, and log them. 18 | # If we do not do so, the user will only see something like this: 19 | # 20 | # 21 | try: 22 | return template.format(self=self) 23 | 24 | except Exception: 25 | logger.exception( 26 | f'Could not print a {self.__class__.__name__} object.', 27 | ) 28 | raise 29 | 30 | def __docstring_template(self) -> str: # noqa: WPS112 31 | """Preformat the message template.""" 32 | return textwrap.dedent( 33 | self.__doc__ or repr(self), 34 | ).strip('\n') 35 | 36 | def __rich__(self): 37 | """Represent the object as Markdown.""" 38 | return Markdown(str(self)) 39 | -------------------------------------------------------------------------------- /documented/error.py: -------------------------------------------------------------------------------- 1 | from documented.documented import Documented 2 | 3 | 4 | class DocumentedError(Documented, Exception): 5 | """Exception with a templated error message provided as the docstring.""" 6 | -------------------------------------------------------------------------------- /documented/untouchable.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass 5 | class Untouchable: 6 | """Object that cannot be accessed.""" 7 | 8 | exception: Exception = Exception('Untouchable object has been touched!') 9 | 10 | def __call__(self, *args, **kwargs): 11 | """Call the object and fail.""" 12 | raise self.exception 13 | 14 | def __getattr__(self, item): # noqa: WPS110 15 | """Ask for an attribute and fail.""" 16 | raise self.exception 17 | 18 | def __getitem__(self, item): # noqa: WPS110 19 | """Ask for an item and fail.""" 20 | raise self.exception 21 | 22 | def __str__(self): 23 | """Ask for string representation and fail.""" 24 | raise self.exception 25 | 26 | def __repr__(self): 27 | """Ask for native representation and fail.""" 28 | raise self.exception 29 | -------------------------------------------------------------------------------- /jeeves.py: -------------------------------------------------------------------------------- 1 | import rich 2 | from sh import mkdocs 3 | 4 | from documented import Documented 5 | 6 | 7 | class Example(Documented): 8 | """ 9 | This is an example Markdown printout. 10 | 11 | * This _message_ 12 | * is *printed* 13 | * from a **Python** `docstring`. 14 | 15 | ## It even supports code 16 | 17 | ```python 18 | def something(): 19 | ... 20 | ``` 21 | 22 | > Cool indeed! 23 | """ 24 | 25 | 26 | def example(): 27 | """Print an example `Documented` object in Markdown.""" 28 | rich.print(Example()) 29 | 30 | 31 | def serve(): 32 | """Serve documentation.""" 33 | mkdocs.serve('-a', 'localhost:6854', _fg=True) 34 | -------------------------------------------------------------------------------- /macros.py: -------------------------------------------------------------------------------- 1 | """MkDocs macros for the documentation site.""" 2 | import functools 3 | import os 4 | import re 5 | from pathlib import Path 6 | 7 | from mkdocs_macros.plugin import MacrosPlugin 8 | from sh import python, ErrorReturnCode 9 | 10 | 11 | TEMPLATE = """ 12 |
13 |
14 |

{path}

15 | ```python 16 | {code} 17 | ``` 18 | 19 | {annotations} 20 |
21 | 22 |
23 |

python

24 | ```python 25 | {output} 26 | ``` 27 |
28 |
29 | """ 30 | 31 | 32 | def format_annotations(annotations: list[str]) -> str: 33 | """Format annotations for a piece of code.""" 34 | enumerated_annotations = enumerate(annotations, start=1) 35 | 36 | return '\n\n'.join( 37 | f'{number}. {annotation}' 38 | for number, annotation in enumerated_annotations 39 | ) 40 | 41 | 42 | def replace_full_file_path(line: str, code_path: Path) -> str: 43 | """Replace full file path with its absolute path, for conciseness.""" 44 | return line.replace(str(code_path.parent.absolute()), '📂') 45 | 46 | 47 | def run_python_script( 48 | path: str, 49 | docs_dir: Path, 50 | annotations: list[str] | None = None, 51 | args: list[str] | None = None, 52 | ): 53 | if annotations is None: 54 | annotations = [] 55 | 56 | if args is None: 57 | args = [] 58 | 59 | code_path = docs_dir / path 60 | code = code_path.read_text() 61 | 62 | try: 63 | stdout, stderr = python( 64 | *args, 65 | code_path, 66 | _env={ 67 | **os.environ, 68 | 'TERM': 'dumb', 69 | }, 70 | ), None 71 | except ErrorReturnCode as err: 72 | stdout = err.stdout.decode() 73 | stderr = err.stderr.decode() 74 | 75 | cmd = 'python' 76 | if args: 77 | formatted_args = ' '.join(args) 78 | cmd = f'{cmd} {formatted_args}' 79 | 80 | output = '\n'.join(filter(bool, [stdout, stderr])) 81 | 82 | output = '\n'.join( 83 | replace_full_file_path(line=line, code_path=code_path) 84 | for line in output.splitlines() 85 | ) 86 | 87 | return TEMPLATE.format( 88 | path=path, 89 | code=code, 90 | output=output, 91 | annotations=format_annotations(annotations), 92 | cmd=cmd, 93 | output_block_class='failure' if stderr else 'success', 94 | ) 95 | 96 | 97 | def define_env(env: MacrosPlugin): 98 | """Hook function.""" 99 | env.macro( 100 | functools.partial( 101 | run_python_script, 102 | docs_dir=Path(env.conf['docs_dir']), 103 | ), 104 | name='run_python_script', 105 | ) 106 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: documented 2 | repo_url: https://github.com/anatoly-scherbakov/documented 3 | repo_name: documented 4 | copyright: Copyright © 2023 Anatoly Scherbakov 5 | 6 | markdown_extensions: 7 | - md_in_html 8 | - admonition 9 | - codehilite 10 | - attr_list 11 | - pymdownx.tabbed 12 | - pymdownx.superfences: 13 | custom_fences: 14 | - name: mermaid 15 | class: mermaid 16 | format: !!python/name:pymdownx.superfences.fence_code_format 17 | - pymdownx.tabbed: 18 | alternate_style: true 19 | - pymdownx.details 20 | - pymdownx.emoji: 21 | emoji_index: !!python/name:materialx.emoji.twemoji 22 | emoji_generator: !!python/name:materialx.emoji.to_svg 23 | 24 | plugins: 25 | - search 26 | - awesome-pages 27 | - mkdocstrings: 28 | handlers: 29 | python: 30 | options: {} 31 | - macros: 32 | on_error_fail: true 33 | modules: 34 | - macros 35 | 36 | theme: 37 | name: material 38 | logo: images/quotes.svg 39 | features: 40 | - navigation.sections 41 | - content.code.annotate 42 | 43 | extra_css: 44 | - css/custom.css 45 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "add-trailing-comma" 5 | version = "2.5.1" 6 | description = "Automatically add trailing commas to calls and literals" 7 | optional = false 8 | python-versions = ">=3.8" 9 | files = [ 10 | {file = "add_trailing_comma-2.5.1-py2.py3-none-any.whl", hash = "sha256:603b4b55f76f85237f4c848e93e56a4c84ebf8c9e329daf44ce3e8111d68557b"}, 11 | {file = "add_trailing_comma-2.5.1.tar.gz", hash = "sha256:f2a4afd41b96d6d34840455752c320c608942757ec6df3aa13b0b3c7effdd49e"}, 12 | ] 13 | 14 | [package.dependencies] 15 | tokenize-rt = ">=3.0.1" 16 | 17 | [[package]] 18 | name = "annotated-types" 19 | version = "0.5.0" 20 | description = "Reusable constraint types to use with typing.Annotated" 21 | optional = false 22 | python-versions = ">=3.7" 23 | files = [ 24 | {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, 25 | {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, 26 | ] 27 | 28 | [package.dependencies] 29 | typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} 30 | 31 | [[package]] 32 | name = "astor" 33 | version = "0.8.1" 34 | description = "Read/rewrite/write Python ASTs" 35 | optional = false 36 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 37 | files = [ 38 | {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, 39 | {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, 40 | ] 41 | 42 | [[package]] 43 | name = "attrs" 44 | version = "23.1.0" 45 | description = "Classes Without Boilerplate" 46 | optional = false 47 | python-versions = ">=3.7" 48 | files = [ 49 | {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, 50 | {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, 51 | ] 52 | 53 | [package.extras] 54 | cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] 55 | dev = ["attrs[docs,tests]", "pre-commit"] 56 | docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] 57 | tests = ["attrs[tests-no-zope]", "zope-interface"] 58 | tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] 59 | 60 | [[package]] 61 | name = "babel" 62 | version = "2.12.1" 63 | description = "Internationalization utilities" 64 | optional = false 65 | python-versions = ">=3.7" 66 | files = [ 67 | {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, 68 | {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, 69 | ] 70 | 71 | [[package]] 72 | name = "bandit" 73 | version = "1.7.5" 74 | description = "Security oriented static analyser for python code." 75 | optional = false 76 | python-versions = ">=3.7" 77 | files = [ 78 | {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, 79 | {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, 80 | ] 81 | 82 | [package.dependencies] 83 | colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} 84 | GitPython = ">=1.0.1" 85 | PyYAML = ">=5.3.1" 86 | rich = "*" 87 | stevedore = ">=1.20.0" 88 | 89 | [package.extras] 90 | test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] 91 | toml = ["tomli (>=1.1.0)"] 92 | yaml = ["PyYAML"] 93 | 94 | [[package]] 95 | name = "bracex" 96 | version = "2.4" 97 | description = "Bash style brace expander." 98 | optional = false 99 | python-versions = ">=3.8" 100 | files = [ 101 | {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"}, 102 | {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"}, 103 | ] 104 | 105 | [[package]] 106 | name = "cachetools" 107 | version = "5.3.1" 108 | description = "Extensible memoizing collections and decorators" 109 | optional = false 110 | python-versions = ">=3.7" 111 | files = [ 112 | {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, 113 | {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, 114 | ] 115 | 116 | [[package]] 117 | name = "certifi" 118 | version = "2023.7.22" 119 | description = "Python package for providing Mozilla's CA Bundle." 120 | optional = false 121 | python-versions = ">=3.6" 122 | files = [ 123 | {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, 124 | {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, 125 | ] 126 | 127 | [[package]] 128 | name = "charset-normalizer" 129 | version = "3.3.0" 130 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 131 | optional = false 132 | python-versions = ">=3.7.0" 133 | files = [ 134 | {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, 135 | {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, 136 | {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, 137 | {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, 138 | {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, 139 | {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, 140 | {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, 141 | {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, 142 | {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, 143 | {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, 144 | {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, 145 | {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, 146 | {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, 147 | {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, 148 | {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, 149 | {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, 150 | {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, 151 | {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, 152 | {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, 153 | {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, 154 | {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, 155 | {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, 156 | {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, 157 | {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, 158 | {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, 159 | {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, 160 | {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, 161 | {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, 162 | {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, 163 | {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, 164 | {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, 165 | {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, 166 | {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, 167 | {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, 168 | {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, 169 | {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, 170 | {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, 171 | {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, 172 | {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, 173 | {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, 174 | {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, 175 | {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, 176 | {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, 177 | {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, 178 | {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, 179 | {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, 180 | {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, 181 | {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, 182 | {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, 183 | {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, 184 | {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, 185 | {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, 186 | {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, 187 | {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, 188 | {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, 189 | {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, 190 | {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, 191 | {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, 192 | {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, 193 | {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, 194 | {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, 195 | {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, 196 | {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, 197 | {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, 198 | {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, 199 | {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, 200 | {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, 201 | {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, 202 | {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, 203 | {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, 204 | {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, 205 | {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, 206 | {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, 207 | {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, 208 | {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, 209 | {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, 210 | {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, 211 | {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, 212 | {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, 213 | {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, 214 | {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, 215 | {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, 216 | {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, 217 | {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, 218 | {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, 219 | {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, 220 | {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, 221 | {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, 222 | {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, 223 | {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, 224 | ] 225 | 226 | [[package]] 227 | name = "classes" 228 | version = "0.4.1" 229 | description = "Smart, pythonic, ad-hoc, typed polymorphism for Python" 230 | optional = false 231 | python-versions = ">=3.7,<4.0" 232 | files = [ 233 | {file = "classes-0.4.1-py3-none-any.whl", hash = "sha256:934a19eb23d2fe0c0430af6eae6d81a4d4fcc53519cf737f69c3bba3994d54e9"}, 234 | {file = "classes-0.4.1.tar.gz", hash = "sha256:4de4fdd6c5c38607bbd8ad76703d7cc4dbe007cfa78e8ef1f62fc6ac55303e23"}, 235 | ] 236 | 237 | [package.dependencies] 238 | typing_extensions = ">=3.10,<5.0" 239 | 240 | [[package]] 241 | name = "click" 242 | version = "8.1.7" 243 | description = "Composable command line interface toolkit" 244 | optional = false 245 | python-versions = ">=3.7" 246 | files = [ 247 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 248 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 249 | ] 250 | 251 | [package.dependencies] 252 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 253 | 254 | [[package]] 255 | name = "colorama" 256 | version = "0.4.6" 257 | description = "Cross-platform colored terminal text." 258 | optional = false 259 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 260 | files = [ 261 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 262 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 263 | ] 264 | 265 | [[package]] 266 | name = "coverage" 267 | version = "7.3.1" 268 | description = "Code coverage measurement for Python" 269 | optional = false 270 | python-versions = ">=3.8" 271 | files = [ 272 | {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, 273 | {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, 274 | {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, 275 | {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, 276 | {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, 277 | {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, 278 | {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, 279 | {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, 280 | {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, 281 | {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, 282 | {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, 283 | {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, 284 | {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, 285 | {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, 286 | {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, 287 | {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, 288 | {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, 289 | {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, 290 | {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, 291 | {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, 292 | {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, 293 | {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, 294 | {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, 295 | {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, 296 | {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, 297 | {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, 298 | {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, 299 | {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, 300 | {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, 301 | {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, 302 | {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, 303 | {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, 304 | {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, 305 | {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, 306 | {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, 307 | {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, 308 | {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, 309 | {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, 310 | {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, 311 | {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, 312 | {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, 313 | {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, 314 | {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, 315 | {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, 316 | {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, 317 | {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, 318 | {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, 319 | {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, 320 | {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, 321 | {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, 322 | {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, 323 | {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, 324 | ] 325 | 326 | [package.dependencies] 327 | tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} 328 | 329 | [package.extras] 330 | toml = ["tomli"] 331 | 332 | [[package]] 333 | name = "darglint" 334 | version = "1.8.1" 335 | description = "A utility for ensuring Google-style docstrings stay up to date with the source code." 336 | optional = false 337 | python-versions = ">=3.6,<4.0" 338 | files = [ 339 | {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"}, 340 | {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"}, 341 | ] 342 | 343 | [[package]] 344 | name = "deepmerge" 345 | version = "0.1.1" 346 | description = "a toolset to deeply merge python dictionaries." 347 | optional = false 348 | python-versions = "*" 349 | files = [ 350 | {file = "deepmerge-0.1.1-py2.py3-none-any.whl", hash = "sha256:190e133a6657303db37f9bb302aa853d8d2b15a0e055d41b99a362598e79206a"}, 351 | {file = "deepmerge-0.1.1.tar.gz", hash = "sha256:fa1d44269786bcc12d30a7471b0b39478aa37a43703b134d7f12649792f92c1f"}, 352 | ] 353 | 354 | [[package]] 355 | name = "docutils" 356 | version = "0.20.1" 357 | description = "Docutils -- Python Documentation Utilities" 358 | optional = false 359 | python-versions = ">=3.7" 360 | files = [ 361 | {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, 362 | {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, 363 | ] 364 | 365 | [[package]] 366 | name = "dominate" 367 | version = "2.8.0" 368 | description = "Dominate is a Python library for creating and manipulating HTML documents using an elegant DOM API." 369 | optional = false 370 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 371 | files = [ 372 | {file = "dominate-2.8.0-py2.py3-none-any.whl", hash = "sha256:1a916479c45b95fedba0d077b081d77c2d2e0f0f484ac827105087af23661d73"}, 373 | {file = "dominate-2.8.0.tar.gz", hash = "sha256:4c90c3befaf88e612b71f4b39af7bcbef8977acfa855cec957225a8fbf504007"}, 374 | ] 375 | 376 | [[package]] 377 | name = "dparse" 378 | version = "0.6.3" 379 | description = "A parser for Python dependency files" 380 | optional = false 381 | python-versions = ">=3.6" 382 | files = [ 383 | {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, 384 | {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, 385 | ] 386 | 387 | [package.dependencies] 388 | packaging = "*" 389 | tomli = {version = "*", markers = "python_version < \"3.11\""} 390 | 391 | [package.extras] 392 | conda = ["pyyaml"] 393 | pipenv = ["pipenv (<=2022.12.19)"] 394 | 395 | [[package]] 396 | name = "entrypoints" 397 | version = "0.4" 398 | description = "Discover and load entry points from installed packages." 399 | optional = false 400 | python-versions = ">=3.6" 401 | files = [ 402 | {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, 403 | {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, 404 | ] 405 | 406 | [[package]] 407 | name = "eradicate" 408 | version = "2.3.0" 409 | description = "Removes commented-out code." 410 | optional = false 411 | python-versions = "*" 412 | files = [ 413 | {file = "eradicate-2.3.0-py3-none-any.whl", hash = "sha256:2b29b3dd27171f209e4ddd8204b70c02f0682ae95eecb353f10e8d72b149c63e"}, 414 | {file = "eradicate-2.3.0.tar.gz", hash = "sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37"}, 415 | ] 416 | 417 | [[package]] 418 | name = "exceptiongroup" 419 | version = "1.1.3" 420 | description = "Backport of PEP 654 (exception groups)" 421 | optional = false 422 | python-versions = ">=3.7" 423 | files = [ 424 | {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, 425 | {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, 426 | ] 427 | 428 | [package.extras] 429 | test = ["pytest (>=6)"] 430 | 431 | [[package]] 432 | name = "flake8" 433 | version = "4.0.1" 434 | description = "the modular source code checker: pep8 pyflakes and co" 435 | optional = false 436 | python-versions = ">=3.6" 437 | files = [ 438 | {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, 439 | {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, 440 | ] 441 | 442 | [package.dependencies] 443 | mccabe = ">=0.6.0,<0.7.0" 444 | pycodestyle = ">=2.8.0,<2.9.0" 445 | pyflakes = ">=2.4.0,<2.5.0" 446 | 447 | [[package]] 448 | name = "flake8-bandit" 449 | version = "3.0.0" 450 | description = "Automated security testing with bandit and flake8." 451 | optional = false 452 | python-versions = ">=3.6" 453 | files = [ 454 | {file = "flake8_bandit-3.0.0-py2.py3-none-any.whl", hash = "sha256:61b617f4f7cdaa0e2b1e6bf7b68afb2b619a227bb3e3ae00dd36c213bd17900a"}, 455 | {file = "flake8_bandit-3.0.0.tar.gz", hash = "sha256:54d19427e6a8d50322a7b02e1841c0a7c22d856975f3459803320e0e18e2d6a1"}, 456 | ] 457 | 458 | [package.dependencies] 459 | bandit = ">=1.7.3" 460 | flake8 = "*" 461 | flake8-polyfill = "*" 462 | pycodestyle = "*" 463 | 464 | [[package]] 465 | name = "flake8-broken-line" 466 | version = "0.5.0" 467 | description = "Flake8 plugin to forbid backslashes for line breaks" 468 | optional = false 469 | python-versions = ">=3.6,<4.0" 470 | files = [ 471 | {file = "flake8-broken-line-0.5.0.tar.gz", hash = "sha256:7c98de9dd1385b71e888709c7f2aee3f0514107ecb5875bc95d0c03392191c97"}, 472 | {file = "flake8_broken_line-0.5.0-py3-none-any.whl", hash = "sha256:daafb19b67eead0410ce7ba155d51a15b9d020ebe7630d87de9c2b93cedb6703"}, 473 | ] 474 | 475 | [package.dependencies] 476 | flake8 = ">=3.5,<6" 477 | 478 | [[package]] 479 | name = "flake8-bugbear" 480 | version = "22.12.6" 481 | description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." 482 | optional = false 483 | python-versions = ">=3.7" 484 | files = [ 485 | {file = "flake8-bugbear-22.12.6.tar.gz", hash = "sha256:4cdb2c06e229971104443ae293e75e64c6107798229202fbe4f4091427a30ac0"}, 486 | {file = "flake8_bugbear-22.12.6-py3-none-any.whl", hash = "sha256:b69a510634f8a9c298dfda2b18a8036455e6b19ecac4fe582e4d7a0abfa50a30"}, 487 | ] 488 | 489 | [package.dependencies] 490 | attrs = ">=19.2.0" 491 | flake8 = ">=3.0.0" 492 | 493 | [package.extras] 494 | dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "tox"] 495 | 496 | [[package]] 497 | name = "flake8-commas" 498 | version = "2.1.0" 499 | description = "Flake8 lint for trailing commas." 500 | optional = false 501 | python-versions = "*" 502 | files = [ 503 | {file = "flake8-commas-2.1.0.tar.gz", hash = "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263"}, 504 | {file = "flake8_commas-2.1.0-py2.py3-none-any.whl", hash = "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"}, 505 | ] 506 | 507 | [package.dependencies] 508 | flake8 = ">=2" 509 | 510 | [[package]] 511 | name = "flake8-comprehensions" 512 | version = "3.14.0" 513 | description = "A flake8 plugin to help you write better list/set/dict comprehensions." 514 | optional = false 515 | python-versions = ">=3.8" 516 | files = [ 517 | {file = "flake8_comprehensions-3.14.0-py3-none-any.whl", hash = "sha256:7b9d07d94aa88e62099a6d1931ddf16c344d4157deedf90fe0d8ee2846f30e97"}, 518 | {file = "flake8_comprehensions-3.14.0.tar.gz", hash = "sha256:81768c61bfc064e1a06222df08a2580d97de10cb388694becaf987c331c6c0cf"}, 519 | ] 520 | 521 | [package.dependencies] 522 | flake8 = ">=3.0,<3.2.0 || >3.2.0" 523 | 524 | [[package]] 525 | name = "flake8-debugger" 526 | version = "4.1.2" 527 | description = "ipdb/pdb statement checker plugin for flake8" 528 | optional = false 529 | python-versions = ">=3.7" 530 | files = [ 531 | {file = "flake8-debugger-4.1.2.tar.gz", hash = "sha256:52b002560941e36d9bf806fca2523dc7fb8560a295d5f1a6e15ac2ded7a73840"}, 532 | {file = "flake8_debugger-4.1.2-py3-none-any.whl", hash = "sha256:0a5e55aeddcc81da631ad9c8c366e7318998f83ff00985a49e6b3ecf61e571bf"}, 533 | ] 534 | 535 | [package.dependencies] 536 | flake8 = ">=3.0" 537 | pycodestyle = "*" 538 | 539 | [[package]] 540 | name = "flake8-docstrings" 541 | version = "1.7.0" 542 | description = "Extension for flake8 which uses pydocstyle to check docstrings" 543 | optional = false 544 | python-versions = ">=3.7" 545 | files = [ 546 | {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, 547 | {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, 548 | ] 549 | 550 | [package.dependencies] 551 | flake8 = ">=3" 552 | pydocstyle = ">=2.1" 553 | 554 | [[package]] 555 | name = "flake8-eradicate" 556 | version = "1.4.0" 557 | description = "Flake8 plugin to find commented out code" 558 | optional = false 559 | python-versions = ">=3.7,<4.0" 560 | files = [ 561 | {file = "flake8-eradicate-1.4.0.tar.gz", hash = "sha256:3088cfd6717d1c9c6c3ac45ef2e5f5b6c7267f7504d5a74b781500e95cb9c7e1"}, 562 | {file = "flake8_eradicate-1.4.0-py3-none-any.whl", hash = "sha256:e3bbd0871be358e908053c1ab728903c114f062ba596b4d40c852fd18f473d56"}, 563 | ] 564 | 565 | [package.dependencies] 566 | attrs = "*" 567 | eradicate = ">=2.0,<3.0" 568 | flake8 = ">=3.5,<6" 569 | 570 | [[package]] 571 | name = "flake8-isort" 572 | version = "4.2.0" 573 | description = "flake8 plugin that integrates isort ." 574 | optional = false 575 | python-versions = "*" 576 | files = [ 577 | {file = "flake8-isort-4.2.0.tar.gz", hash = "sha256:26571500cd54976bbc0cf1006ffbcd1a68dd102f816b7a1051b219616ba9fee0"}, 578 | {file = "flake8_isort-4.2.0-py3-none-any.whl", hash = "sha256:5b87630fb3719bf4c1833fd11e0d9534f43efdeba524863e15d8f14a7ef6adbf"}, 579 | ] 580 | 581 | [package.dependencies] 582 | flake8 = ">=3.2.1,<6" 583 | isort = ">=4.3.5,<6" 584 | 585 | [package.extras] 586 | test = ["pytest-cov"] 587 | 588 | [[package]] 589 | name = "flake8-polyfill" 590 | version = "1.0.2" 591 | description = "Polyfill package for Flake8 plugins" 592 | optional = false 593 | python-versions = "*" 594 | files = [ 595 | {file = "flake8-polyfill-1.0.2.tar.gz", hash = "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda"}, 596 | {file = "flake8_polyfill-1.0.2-py2.py3-none-any.whl", hash = "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9"}, 597 | ] 598 | 599 | [package.dependencies] 600 | flake8 = "*" 601 | 602 | [[package]] 603 | name = "flake8-quotes" 604 | version = "3.3.2" 605 | description = "Flake8 lint for quotes." 606 | optional = false 607 | python-versions = "*" 608 | files = [ 609 | {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"}, 610 | ] 611 | 612 | [package.dependencies] 613 | flake8 = "*" 614 | 615 | [[package]] 616 | name = "flake8-rst-docstrings" 617 | version = "0.2.7" 618 | description = "Python docstring reStructuredText (RST) validator" 619 | optional = false 620 | python-versions = ">=3.7" 621 | files = [ 622 | {file = "flake8-rst-docstrings-0.2.7.tar.gz", hash = "sha256:2740067ab9237559dd45a3434d8c987792c7b259ca563621a3b95efe201f5382"}, 623 | {file = "flake8_rst_docstrings-0.2.7-py3-none-any.whl", hash = "sha256:5d56075dce360bcc9c6775bfe7cb431aa395de600ca7e8d40580a28d50b2a803"}, 624 | ] 625 | 626 | [package.dependencies] 627 | flake8 = ">=3.0.0" 628 | pygments = "*" 629 | restructuredtext-lint = "*" 630 | 631 | [[package]] 632 | name = "flake8-string-format" 633 | version = "0.3.0" 634 | description = "string format checker, plugin for flake8" 635 | optional = false 636 | python-versions = "*" 637 | files = [ 638 | {file = "flake8-string-format-0.3.0.tar.gz", hash = "sha256:65f3da786a1461ef77fca3780b314edb2853c377f2e35069723348c8917deaa2"}, 639 | {file = "flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af"}, 640 | ] 641 | 642 | [package.dependencies] 643 | flake8 = "*" 644 | 645 | [[package]] 646 | name = "flakeheaven" 647 | version = "3.3.0" 648 | description = "FlakeHeaven is a [Flake8](https://gitlab.com/pycqa/flake8) wrapper to make it cool." 649 | optional = false 650 | python-versions = ">=3.7,<4.0" 651 | files = [ 652 | {file = "flakeheaven-3.3.0-py3-none-any.whl", hash = "sha256:ae246197a178845b30b63fc03023f7ba925cc84cc96314ec19807dafcd6b39a3"}, 653 | {file = "flakeheaven-3.3.0.tar.gz", hash = "sha256:eb07860e028ff8dd56cce742c4766624a37a4ce397fd34300254ab623d13047b"}, 654 | ] 655 | 656 | [package.dependencies] 657 | colorama = "*" 658 | entrypoints = "*" 659 | flake8 = ">=4.0.1,<5.0.0" 660 | pygments = "*" 661 | toml = "*" 662 | urllib3 = "*" 663 | 664 | [package.extras] 665 | docs = ["alabaster", "myst-parser (>=0.18.0,<0.19.0)", "pygments-github-lexers", "sphinx"] 666 | 667 | [[package]] 668 | name = "frozendict" 669 | version = "2.3.8" 670 | description = "A simple immutable dictionary" 671 | optional = false 672 | python-versions = ">=3.6" 673 | files = [ 674 | {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, 675 | {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, 676 | {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, 677 | {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, 678 | {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, 679 | {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, 680 | {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, 681 | {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, 682 | {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, 683 | {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, 684 | {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, 685 | {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, 686 | {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, 687 | {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, 688 | {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, 689 | {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, 690 | {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, 691 | {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, 692 | {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, 693 | {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, 694 | {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, 695 | {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, 696 | {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, 697 | {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, 698 | {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, 699 | {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, 700 | {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, 701 | {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, 702 | {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, 703 | {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, 704 | {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, 705 | {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, 706 | {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, 707 | {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, 708 | {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, 709 | {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, 710 | {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, 711 | ] 712 | 713 | [[package]] 714 | name = "funcy" 715 | version = "2.0" 716 | description = "A fancy and practical functional tools" 717 | optional = false 718 | python-versions = "*" 719 | files = [ 720 | {file = "funcy-2.0-py2.py3-none-any.whl", hash = "sha256:53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0"}, 721 | {file = "funcy-2.0.tar.gz", hash = "sha256:3963315d59d41c6f30c04bc910e10ab50a3ac4a225868bfa96feed133df075cb"}, 722 | ] 723 | 724 | [[package]] 725 | name = "ghp-import" 726 | version = "2.1.0" 727 | description = "Copy your docs directly to the gh-pages branch." 728 | optional = false 729 | python-versions = "*" 730 | files = [ 731 | {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, 732 | {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, 733 | ] 734 | 735 | [package.dependencies] 736 | python-dateutil = ">=2.8.1" 737 | 738 | [package.extras] 739 | dev = ["flake8", "markdown", "twine", "wheel"] 740 | 741 | [[package]] 742 | name = "gitdb" 743 | version = "4.0.10" 744 | description = "Git Object Database" 745 | optional = false 746 | python-versions = ">=3.7" 747 | files = [ 748 | {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, 749 | {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, 750 | ] 751 | 752 | [package.dependencies] 753 | smmap = ">=3.0.1,<6" 754 | 755 | [[package]] 756 | name = "gitpython" 757 | version = "3.1.37" 758 | description = "GitPython is a Python library used to interact with Git repositories" 759 | optional = false 760 | python-versions = ">=3.7" 761 | files = [ 762 | {file = "GitPython-3.1.37-py3-none-any.whl", hash = "sha256:5f4c4187de49616d710a77e98ddf17b4782060a1788df441846bddefbb89ab33"}, 763 | {file = "GitPython-3.1.37.tar.gz", hash = "sha256:f9b9ddc0761c125d5780eab2d64be4873fc6817c2899cbcb34b02344bdc7bc54"}, 764 | ] 765 | 766 | [package.dependencies] 767 | gitdb = ">=4.0.1,<5" 768 | 769 | [package.extras] 770 | test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-sugar"] 771 | 772 | [[package]] 773 | name = "griffe" 774 | version = "0.36.4" 775 | description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." 776 | optional = false 777 | python-versions = ">=3.8" 778 | files = [ 779 | {file = "griffe-0.36.4-py3-none-any.whl", hash = "sha256:4e37a723891fa774fafdd67240571801a1d90d0236562c178707e5c37fb3ebe2"}, 780 | {file = "griffe-0.36.4.tar.gz", hash = "sha256:7b5968f5cc6446637ed0d3ded9de07d6a928f10ccb24116b1dd843635bf1994a"}, 781 | ] 782 | 783 | [package.dependencies] 784 | colorama = ">=0.4" 785 | 786 | [[package]] 787 | name = "idna" 788 | version = "3.4" 789 | description = "Internationalized Domain Names in Applications (IDNA)" 790 | optional = false 791 | python-versions = ">=3.5" 792 | files = [ 793 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, 794 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, 795 | ] 796 | 797 | [[package]] 798 | name = "importlib-metadata" 799 | version = "6.8.0" 800 | description = "Read metadata from Python packages" 801 | optional = false 802 | python-versions = ">=3.8" 803 | files = [ 804 | {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, 805 | {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, 806 | ] 807 | 808 | [package.dependencies] 809 | zipp = ">=0.5" 810 | 811 | [package.extras] 812 | docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] 813 | perf = ["ipython"] 814 | testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] 815 | 816 | [[package]] 817 | name = "iniconfig" 818 | version = "2.0.0" 819 | description = "brain-dead simple config-ini parsing" 820 | optional = false 821 | python-versions = ">=3.7" 822 | files = [ 823 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, 824 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, 825 | ] 826 | 827 | [[package]] 828 | name = "iolanta" 829 | version = "1.0.19" 830 | description = "Semantic Web browser" 831 | optional = false 832 | python-versions = ">=3.10,<4.0" 833 | files = [ 834 | {file = "iolanta-1.0.19-py3-none-any.whl", hash = "sha256:e256ddcfeabbda286e32adaeacadbfda5cf99dea78f9546424f9a57bb821a82f"}, 835 | {file = "iolanta-1.0.19.tar.gz", hash = "sha256:a9830f4403c051538c1199cd79cb44290882a4d201598988192c6ba156823e11"}, 836 | ] 837 | 838 | [package.dependencies] 839 | classes = ">=0.4.0,<0.5.0" 840 | deepmerge = ">=0.1.1,<0.2.0" 841 | documented = ">=0.1.1,<0.2.0" 842 | dominate = ">=2.6.0,<3.0.0" 843 | funcy = ">=2.0,<3.0" 844 | more-itertools = ">=9.0.0,<10.0.0" 845 | owlrl = ">=6.0.2,<7.0.0" 846 | PyLD = ">=2.0.3,<3.0.0" 847 | python-frontmatter = ">=0.5.0,<0.6.0" 848 | rdflib = ">=6.2.0,<7.0.0" 849 | requests = ">=2.25.1,<3.0.0" 850 | rich = ">=13.3.1,<14.0.0" 851 | typer = ">=0.9.0,<0.10.0" 852 | urlpath = ">=1.1.7,<2.0.0" 853 | 854 | [[package]] 855 | name = "iolanta-jinja2" 856 | version = "0.1.4" 857 | description = "Render Jinja2 templates from Iolanta graph" 858 | optional = false 859 | python-versions = ">=3.10,<4.0" 860 | files = [ 861 | {file = "iolanta_jinja2-0.1.4-py3-none-any.whl", hash = "sha256:9670c6810f8778a3bb7f05763d349302be052b63d575e4a931587f5fe413c3e7"}, 862 | {file = "iolanta_jinja2-0.1.4.tar.gz", hash = "sha256:a8db8289ee96e1a48aafe4ef8b75ee3ab8bd8ac193ae604a5d267d4473f29f27"}, 863 | ] 864 | 865 | [package.dependencies] 866 | iolanta = ">=1.0.12,<2.0.0" 867 | Jinja2 = ">=3.1.2,<4.0.0" 868 | 869 | [[package]] 870 | name = "isodate" 871 | version = "0.6.1" 872 | description = "An ISO 8601 date/time/duration parser and formatter" 873 | optional = false 874 | python-versions = "*" 875 | files = [ 876 | {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, 877 | {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, 878 | ] 879 | 880 | [package.dependencies] 881 | six = "*" 882 | 883 | [[package]] 884 | name = "isort" 885 | version = "5.12.0" 886 | description = "A Python utility / library to sort Python imports." 887 | optional = false 888 | python-versions = ">=3.8.0" 889 | files = [ 890 | {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, 891 | {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, 892 | ] 893 | 894 | [package.extras] 895 | colors = ["colorama (>=0.4.3)"] 896 | pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] 897 | plugins = ["setuptools"] 898 | requirements-deprecated-finder = ["pip-api", "pipreqs"] 899 | 900 | [[package]] 901 | name = "jeeves-shell" 902 | version = "2.3.1" 903 | description = "Pythonic replacement for GNU Make" 904 | optional = false 905 | python-versions = ">=3.10,<4.0" 906 | files = [ 907 | {file = "jeeves_shell-2.3.1-py3-none-any.whl", hash = "sha256:21e8a3872ae59bf8dce64bf805ac42c1d7eda5ffd4b4dd36c2ee6c9c6c8c6887"}, 908 | {file = "jeeves_shell-2.3.1.tar.gz", hash = "sha256:0183a41c6722601cee17d04bd49d072b7118ad7ca1ef0150ddd1bbafc50de40d"}, 909 | ] 910 | 911 | [package.dependencies] 912 | documented = ">=0.1.1,<0.2.0" 913 | funcy = ">=2.0,<3.0" 914 | rich = {version = ">=13.3.5,<14.0.0", optional = true, markers = "extra == \"all\""} 915 | sh = {version = ">=2.0.4,<3.0.0", optional = true, markers = "extra == \"all\""} 916 | typer = ">=0.9.0,<0.10.0" 917 | 918 | [package.extras] 919 | all = ["rich (>=13.3.5,<14.0.0)", "sh (>=2.0.4,<3.0.0)"] 920 | 921 | [[package]] 922 | name = "jeeves-yeti-pyproject" 923 | version = "0.2.26" 924 | description = "Opinionated Jeeves plugin for Python projects." 925 | optional = false 926 | python-versions = ">=3.10,<4.0" 927 | files = [ 928 | {file = "jeeves_yeti_pyproject-0.2.26-py3-none-any.whl", hash = "sha256:c6eb2abdec98d998460a0557b7f9a4704e87923e2d1f6fac0f258a1b7e35ddc0"}, 929 | {file = "jeeves_yeti_pyproject-0.2.26.tar.gz", hash = "sha256:092a6dc5c46f70a461d9590ad4beaf65803ec38caedc6a35da1631c3af937a80"}, 930 | ] 931 | 932 | [package.dependencies] 933 | add-trailing-comma = ">=2.4.0,<3.0.0" 934 | flakeheaven = ">=3.2.1,<4.0.0" 935 | jeeves-shell = {version = ">=2.3.0", extras = ["all"]} 936 | mkdocs = ">=1.4.2,<2.0.0" 937 | mkdocs-iolanta = ">=0.1.0,<0.2.0" 938 | mkdocs-macros-plugin = ">=0.7.0,<0.8.0" 939 | mkdocs-material = ">=9.0.3,<10.0.0" 940 | mypy = ">=0.910,<0.911" 941 | pytest = ">=7.4.2,<8.0.0" 942 | pytest-cov = ">=4.1.0,<5.0.0" 943 | pytest-randomly = ">=3.8,<4.0" 944 | rich = ">=13.3.1,<14.0.0" 945 | safety = ">=1.10,<2.0" 946 | tomlkit = ">=0.11.6,<0.12.0" 947 | urllib3 = "<2.0.0" 948 | wemake-python-styleguide = ">=0.17.0,<0.18.0" 949 | 950 | [[package]] 951 | name = "jinja2" 952 | version = "3.1.2" 953 | description = "A very fast and expressive template engine." 954 | optional = false 955 | python-versions = ">=3.7" 956 | files = [ 957 | {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, 958 | {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, 959 | ] 960 | 961 | [package.dependencies] 962 | MarkupSafe = ">=2.0" 963 | 964 | [package.extras] 965 | i18n = ["Babel (>=2.7)"] 966 | 967 | [[package]] 968 | name = "lxml" 969 | version = "4.9.3" 970 | description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." 971 | optional = false 972 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" 973 | files = [ 974 | {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, 975 | {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, 976 | {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, 977 | {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, 978 | {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, 979 | {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, 980 | {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, 981 | {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, 982 | {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, 983 | {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, 984 | {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, 985 | {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, 986 | {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, 987 | {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, 988 | {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, 989 | {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, 990 | {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, 991 | {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, 992 | {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, 993 | {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, 994 | {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, 995 | {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, 996 | {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, 997 | {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, 998 | {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, 999 | {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, 1000 | {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, 1001 | {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, 1002 | {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, 1003 | {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, 1004 | {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, 1005 | {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, 1006 | {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, 1007 | {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, 1008 | {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, 1009 | {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, 1010 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, 1011 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, 1012 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, 1013 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, 1014 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, 1015 | {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, 1016 | {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, 1017 | {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, 1018 | {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, 1019 | {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, 1020 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, 1021 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, 1022 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, 1023 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, 1024 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, 1025 | {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, 1026 | {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, 1027 | {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, 1028 | {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, 1029 | {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, 1030 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, 1031 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, 1032 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, 1033 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, 1034 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, 1035 | {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, 1036 | {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, 1037 | {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, 1038 | {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, 1039 | {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, 1040 | {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, 1041 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, 1042 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, 1043 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, 1044 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, 1045 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, 1046 | {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, 1047 | {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, 1048 | {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, 1049 | {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, 1050 | {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, 1051 | {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, 1052 | {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, 1053 | {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, 1054 | {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, 1055 | {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, 1056 | {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, 1057 | {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, 1058 | {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, 1059 | {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, 1060 | {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, 1061 | {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, 1062 | {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, 1063 | {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, 1064 | {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, 1065 | {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, 1066 | ] 1067 | 1068 | [package.extras] 1069 | cssselect = ["cssselect (>=0.7)"] 1070 | html5 = ["html5lib"] 1071 | htmlsoup = ["BeautifulSoup4"] 1072 | source = ["Cython (>=0.29.35)"] 1073 | 1074 | [[package]] 1075 | name = "markdown" 1076 | version = "3.4.4" 1077 | description = "Python implementation of John Gruber's Markdown." 1078 | optional = false 1079 | python-versions = ">=3.7" 1080 | files = [ 1081 | {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, 1082 | {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, 1083 | ] 1084 | 1085 | [package.dependencies] 1086 | importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} 1087 | 1088 | [package.extras] 1089 | docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] 1090 | testing = ["coverage", "pyyaml"] 1091 | 1092 | [[package]] 1093 | name = "markdown-it-py" 1094 | version = "3.0.0" 1095 | description = "Python port of markdown-it. Markdown parsing, done right!" 1096 | optional = false 1097 | python-versions = ">=3.8" 1098 | files = [ 1099 | {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, 1100 | {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, 1101 | ] 1102 | 1103 | [package.dependencies] 1104 | mdurl = ">=0.1,<1.0" 1105 | 1106 | [package.extras] 1107 | benchmarking = ["psutil", "pytest", "pytest-benchmark"] 1108 | code-style = ["pre-commit (>=3.0,<4.0)"] 1109 | compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] 1110 | linkify = ["linkify-it-py (>=1,<3)"] 1111 | plugins = ["mdit-py-plugins"] 1112 | profiling = ["gprof2dot"] 1113 | rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] 1114 | testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] 1115 | 1116 | [[package]] 1117 | name = "markupsafe" 1118 | version = "2.1.3" 1119 | description = "Safely add untrusted strings to HTML/XML markup." 1120 | optional = false 1121 | python-versions = ">=3.7" 1122 | files = [ 1123 | {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, 1124 | {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, 1125 | {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, 1126 | {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, 1127 | {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, 1128 | {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, 1129 | {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, 1130 | {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, 1131 | {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, 1132 | {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, 1133 | {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, 1134 | {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, 1135 | {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, 1136 | {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, 1137 | {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, 1138 | {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, 1139 | {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, 1140 | {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, 1141 | {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, 1142 | {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, 1143 | {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, 1144 | {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, 1145 | {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, 1146 | {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, 1147 | {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, 1148 | {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, 1149 | {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, 1150 | {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, 1151 | {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, 1152 | {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, 1153 | {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, 1154 | {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, 1155 | {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, 1156 | {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, 1157 | {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, 1158 | {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, 1159 | {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, 1160 | {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, 1161 | {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, 1162 | {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, 1163 | {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, 1164 | {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, 1165 | {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, 1166 | {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, 1167 | {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, 1168 | {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, 1169 | {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, 1170 | {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, 1171 | {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, 1172 | {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, 1173 | {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, 1174 | {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, 1175 | {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, 1176 | {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, 1177 | {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, 1178 | {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, 1179 | {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, 1180 | {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, 1181 | {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, 1182 | {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "mccabe" 1187 | version = "0.6.1" 1188 | description = "McCabe checker, plugin for flake8" 1189 | optional = false 1190 | python-versions = "*" 1191 | files = [ 1192 | {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, 1193 | {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "mdurl" 1198 | version = "0.1.2" 1199 | description = "Markdown URL utilities" 1200 | optional = false 1201 | python-versions = ">=3.7" 1202 | files = [ 1203 | {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, 1204 | {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "mergedeep" 1209 | version = "1.3.4" 1210 | description = "A deep merge function for 🐍." 1211 | optional = false 1212 | python-versions = ">=3.6" 1213 | files = [ 1214 | {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, 1215 | {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, 1216 | ] 1217 | 1218 | [[package]] 1219 | name = "mkdocs" 1220 | version = "1.5.3" 1221 | description = "Project documentation with Markdown." 1222 | optional = false 1223 | python-versions = ">=3.7" 1224 | files = [ 1225 | {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, 1226 | {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, 1227 | ] 1228 | 1229 | [package.dependencies] 1230 | click = ">=7.0" 1231 | colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} 1232 | ghp-import = ">=1.0" 1233 | importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} 1234 | jinja2 = ">=2.11.1" 1235 | markdown = ">=3.2.1" 1236 | markupsafe = ">=2.0.1" 1237 | mergedeep = ">=1.3.4" 1238 | packaging = ">=20.5" 1239 | pathspec = ">=0.11.1" 1240 | platformdirs = ">=2.2.0" 1241 | pyyaml = ">=5.1" 1242 | pyyaml-env-tag = ">=0.1" 1243 | watchdog = ">=2.0" 1244 | 1245 | [package.extras] 1246 | i18n = ["babel (>=2.9.0)"] 1247 | min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] 1248 | 1249 | [[package]] 1250 | name = "mkdocs-autorefs" 1251 | version = "0.5.0" 1252 | description = "Automatically link across pages in MkDocs." 1253 | optional = false 1254 | python-versions = ">=3.8" 1255 | files = [ 1256 | {file = "mkdocs_autorefs-0.5.0-py3-none-any.whl", hash = "sha256:7930fcb8ac1249f10e683967aeaddc0af49d90702af111a5e390e8b20b3d97ff"}, 1257 | {file = "mkdocs_autorefs-0.5.0.tar.gz", hash = "sha256:9a5054a94c08d28855cfab967ada10ed5be76e2bfad642302a610b252c3274c0"}, 1258 | ] 1259 | 1260 | [package.dependencies] 1261 | Markdown = ">=3.3" 1262 | mkdocs = ">=1.1" 1263 | 1264 | [[package]] 1265 | name = "mkdocs-awesome-pages-plugin" 1266 | version = "2.9.2" 1267 | description = "An MkDocs plugin that simplifies configuring page titles and their order" 1268 | optional = false 1269 | python-versions = ">=3.7" 1270 | files = [ 1271 | {file = "mkdocs_awesome_pages_plugin-2.9.2-py3-none-any.whl", hash = "sha256:9c795587695bd1ee85a8b7e43293005418df5a8b9ef296a3e628be427b693b4d"}, 1272 | {file = "mkdocs_awesome_pages_plugin-2.9.2.tar.gz", hash = "sha256:c3f7d366ecfe99b64524c49a84d8e13c576c19a918ea2e6f59bb486a259313af"}, 1273 | ] 1274 | 1275 | [package.dependencies] 1276 | mkdocs = ">=1" 1277 | natsort = ">=8.1.0" 1278 | wcmatch = ">=7" 1279 | 1280 | [[package]] 1281 | name = "mkdocs-iolanta" 1282 | version = "0.1.6" 1283 | description = "MkDocs plugin to integrate with Iolanta semantic web framework." 1284 | optional = false 1285 | python-versions = ">=3.10,<4.0" 1286 | files = [ 1287 | {file = "mkdocs_iolanta-0.1.6-py3-none-any.whl", hash = "sha256:59a8a220052d9e26e135f5d09c9a0f3eedec1b68dfd95aa510b0a17ddb7e9d08"}, 1288 | {file = "mkdocs_iolanta-0.1.6.tar.gz", hash = "sha256:8109fa47f3a02e7691310dd8bb25b30da6f98bc904e8dead485aaf8195b07e5d"}, 1289 | ] 1290 | 1291 | [package.dependencies] 1292 | iolanta = ">=1.0.14,<2.0.0" 1293 | iolanta-jinja2 = ">=0.1.2,<0.2.0" 1294 | mkdocs = ">=1.4.2,<2.0.0" 1295 | mkdocs-macros-plugin = ">=0.7.0,<0.8.0" 1296 | 1297 | [[package]] 1298 | name = "mkdocs-macros-plugin" 1299 | version = "0.7.0" 1300 | description = "Unleash the power of MkDocs with macros and variables" 1301 | optional = false 1302 | python-versions = ">=3.5" 1303 | files = [ 1304 | {file = "mkdocs-macros-plugin-0.7.0.tar.gz", hash = "sha256:9e64e1cabcf6925359de29fe54f62d5847fb455c2528c440b87f8f1240650608"}, 1305 | {file = "mkdocs_macros_plugin-0.7.0-py3-none-any.whl", hash = "sha256:96bdabeb98b96139544f0048ea2f5cb80c7befde6b21e94c6d4596c22774cbcf"}, 1306 | ] 1307 | 1308 | [package.dependencies] 1309 | jinja2 = "*" 1310 | mkdocs = ">=0.17" 1311 | python-dateutil = "*" 1312 | pyyaml = "*" 1313 | termcolor = "*" 1314 | 1315 | [package.extras] 1316 | test = ["mkdocs-include-markdown-plugin", "mkdocs-macros-test", "mkdocs-material (>=6.2)"] 1317 | 1318 | [[package]] 1319 | name = "mkdocs-material" 1320 | version = "9.4.3" 1321 | description = "Documentation that simply works" 1322 | optional = false 1323 | python-versions = ">=3.8" 1324 | files = [ 1325 | {file = "mkdocs_material-9.4.3-py3-none-any.whl", hash = "sha256:3274a47a4e55a541b25bd8fa4937cf3f3c82a51763453511661e0052062758b9"}, 1326 | {file = "mkdocs_material-9.4.3.tar.gz", hash = "sha256:5c9abc3f6ba8f88be1f9f13df23d695ca4dddbdd8a3538e4e6279c055c3936bc"}, 1327 | ] 1328 | 1329 | [package.dependencies] 1330 | babel = ">=2.10,<3.0" 1331 | colorama = ">=0.4,<1.0" 1332 | jinja2 = ">=3.0,<4.0" 1333 | markdown = ">=3.2,<4.0" 1334 | mkdocs = ">=1.5.3,<2.0" 1335 | mkdocs-material-extensions = ">=1.2,<2.0" 1336 | paginate = ">=0.5,<1.0" 1337 | pygments = ">=2.16,<3.0" 1338 | pymdown-extensions = ">=10.2,<11.0" 1339 | regex = ">=2022.4" 1340 | requests = ">=2.26,<3.0" 1341 | 1342 | [package.extras] 1343 | git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] 1344 | imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=9.4,<10.0)"] 1345 | recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] 1346 | 1347 | [[package]] 1348 | name = "mkdocs-material-extensions" 1349 | version = "1.2" 1350 | description = "Extension pack for Python Markdown and MkDocs Material." 1351 | optional = false 1352 | python-versions = ">=3.7" 1353 | files = [ 1354 | {file = "mkdocs_material_extensions-1.2-py3-none-any.whl", hash = "sha256:c767bd6d6305f6420a50f0b541b0c9966d52068839af97029be14443849fb8a1"}, 1355 | {file = "mkdocs_material_extensions-1.2.tar.gz", hash = "sha256:27e2d1ed2d031426a6e10d5ea06989d67e90bb02acd588bc5673106b5ee5eedf"}, 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "mkdocstrings" 1360 | version = "0.24.0" 1361 | description = "Automatic documentation from sources, for MkDocs." 1362 | optional = false 1363 | python-versions = ">=3.8" 1364 | files = [ 1365 | {file = "mkdocstrings-0.24.0-py3-none-any.whl", hash = "sha256:f4908560c10f587326d8f5165d1908817b2e280bbf707607f601c996366a2264"}, 1366 | {file = "mkdocstrings-0.24.0.tar.gz", hash = "sha256:222b1165be41257b494a9d29b14135d2b7ca43f38161d5b10caae03b87bd4f7e"}, 1367 | ] 1368 | 1369 | [package.dependencies] 1370 | click = ">=7.0" 1371 | importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} 1372 | Jinja2 = ">=2.11.1" 1373 | Markdown = ">=3.3" 1374 | MarkupSafe = ">=1.1" 1375 | mkdocs = ">=1.4" 1376 | mkdocs-autorefs = ">=0.3.1" 1377 | mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} 1378 | platformdirs = ">=2.2.0" 1379 | pymdown-extensions = ">=6.3" 1380 | typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} 1381 | 1382 | [package.extras] 1383 | crystal = ["mkdocstrings-crystal (>=0.3.4)"] 1384 | python = ["mkdocstrings-python (>=0.5.2)"] 1385 | python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] 1386 | 1387 | [[package]] 1388 | name = "mkdocstrings-python" 1389 | version = "1.7.1" 1390 | description = "A Python handler for mkdocstrings." 1391 | optional = false 1392 | python-versions = ">=3.8" 1393 | files = [ 1394 | {file = "mkdocstrings_python-1.7.1-py3-none-any.whl", hash = "sha256:cb1651fba8423324b861fe38ce881cf56f30738770a2119f007a0a4ffcb00777"}, 1395 | {file = "mkdocstrings_python-1.7.1.tar.gz", hash = "sha256:90d838dc7861674794e3ca79f64c23c5d8fa76b9aa29db834b246771964c0881"}, 1396 | ] 1397 | 1398 | [package.dependencies] 1399 | griffe = ">=0.35" 1400 | mkdocstrings = ">=0.20" 1401 | 1402 | [[package]] 1403 | name = "more-itertools" 1404 | version = "9.1.0" 1405 | description = "More routines for operating on iterables, beyond itertools" 1406 | optional = false 1407 | python-versions = ">=3.7" 1408 | files = [ 1409 | {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, 1410 | {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, 1411 | ] 1412 | 1413 | [[package]] 1414 | name = "mypy" 1415 | version = "0.910" 1416 | description = "Optional static typing for Python" 1417 | optional = false 1418 | python-versions = ">=3.5" 1419 | files = [ 1420 | {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, 1421 | {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, 1422 | {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, 1423 | {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, 1424 | {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, 1425 | {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, 1426 | {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, 1427 | {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, 1428 | {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, 1429 | {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, 1430 | {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, 1431 | {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, 1432 | {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, 1433 | {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, 1434 | {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, 1435 | {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, 1436 | {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, 1437 | {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, 1438 | {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, 1439 | {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, 1440 | {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, 1441 | {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, 1442 | {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, 1443 | ] 1444 | 1445 | [package.dependencies] 1446 | mypy-extensions = ">=0.4.3,<0.5.0" 1447 | toml = "*" 1448 | typing-extensions = ">=3.7.4" 1449 | 1450 | [package.extras] 1451 | dmypy = ["psutil (>=4.0)"] 1452 | python2 = ["typed-ast (>=1.4.0,<1.5.0)"] 1453 | 1454 | [[package]] 1455 | name = "mypy-extensions" 1456 | version = "0.4.4" 1457 | description = "Experimental type system extensions for programs checked with the mypy typechecker." 1458 | optional = false 1459 | python-versions = ">=2.7" 1460 | files = [ 1461 | {file = "mypy_extensions-0.4.4.tar.gz", hash = "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd"}, 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "natsort" 1466 | version = "8.4.0" 1467 | description = "Simple yet flexible natural sorting in Python." 1468 | optional = false 1469 | python-versions = ">=3.7" 1470 | files = [ 1471 | {file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"}, 1472 | {file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"}, 1473 | ] 1474 | 1475 | [package.extras] 1476 | fast = ["fastnumbers (>=2.0.0)"] 1477 | icu = ["PyICU (>=1.0.0)"] 1478 | 1479 | [[package]] 1480 | name = "owlrl" 1481 | version = "6.0.2" 1482 | description = "OWL-RL and RDFS based RDF Closure inferencing for Python" 1483 | optional = false 1484 | python-versions = "*" 1485 | files = [ 1486 | {file = "owlrl-6.0.2-py3-none-any.whl", hash = "sha256:57eca06b221edbbc682376c8d42e2ddffc99f61e82c0da02e26735592f08bacc"}, 1487 | {file = "owlrl-6.0.2.tar.gz", hash = "sha256:904e3310ff4df15101475776693d2427d1f8244ee9a6a9f9e13c3c57fae90b74"}, 1488 | ] 1489 | 1490 | [package.dependencies] 1491 | rdflib = ">=6.0.2" 1492 | 1493 | [[package]] 1494 | name = "packaging" 1495 | version = "23.2" 1496 | description = "Core utilities for Python packages" 1497 | optional = false 1498 | python-versions = ">=3.7" 1499 | files = [ 1500 | {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, 1501 | {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "paginate" 1506 | version = "0.5.6" 1507 | description = "Divides large result sets into pages for easier browsing" 1508 | optional = false 1509 | python-versions = "*" 1510 | files = [ 1511 | {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "pathspec" 1516 | version = "0.11.2" 1517 | description = "Utility library for gitignore style pattern matching of file paths." 1518 | optional = false 1519 | python-versions = ">=3.7" 1520 | files = [ 1521 | {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, 1522 | {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, 1523 | ] 1524 | 1525 | [[package]] 1526 | name = "pbr" 1527 | version = "5.11.1" 1528 | description = "Python Build Reasonableness" 1529 | optional = false 1530 | python-versions = ">=2.6" 1531 | files = [ 1532 | {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, 1533 | {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, 1534 | ] 1535 | 1536 | [[package]] 1537 | name = "pep8-naming" 1538 | version = "0.13.2" 1539 | description = "Check PEP-8 naming conventions, plugin for flake8" 1540 | optional = false 1541 | python-versions = ">=3.7" 1542 | files = [ 1543 | {file = "pep8-naming-0.13.2.tar.gz", hash = "sha256:93eef62f525fd12a6f8c98f4dcc17fa70baae2f37fa1f73bec00e3e44392fa48"}, 1544 | {file = "pep8_naming-0.13.2-py3-none-any.whl", hash = "sha256:59e29e55c478db69cffbe14ab24b5bd2cd615c0413edf790d47d3fb7ba9a4e23"}, 1545 | ] 1546 | 1547 | [package.dependencies] 1548 | flake8 = ">=3.9.1" 1549 | 1550 | [[package]] 1551 | name = "platformdirs" 1552 | version = "3.11.0" 1553 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 1554 | optional = false 1555 | python-versions = ">=3.7" 1556 | files = [ 1557 | {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, 1558 | {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, 1559 | ] 1560 | 1561 | [package.extras] 1562 | docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] 1563 | test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] 1564 | 1565 | [[package]] 1566 | name = "pluggy" 1567 | version = "1.3.0" 1568 | description = "plugin and hook calling mechanisms for python" 1569 | optional = false 1570 | python-versions = ">=3.8" 1571 | files = [ 1572 | {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, 1573 | {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, 1574 | ] 1575 | 1576 | [package.extras] 1577 | dev = ["pre-commit", "tox"] 1578 | testing = ["pytest", "pytest-benchmark"] 1579 | 1580 | [[package]] 1581 | name = "pycodestyle" 1582 | version = "2.8.0" 1583 | description = "Python style guide checker" 1584 | optional = false 1585 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 1586 | files = [ 1587 | {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, 1588 | {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "pydantic" 1593 | version = "2.5.1" 1594 | description = "Data validation using Python type hints" 1595 | optional = false 1596 | python-versions = ">=3.7" 1597 | files = [ 1598 | {file = "pydantic-2.5.1-py3-none-any.whl", hash = "sha256:dc5244a8939e0d9a68f1f1b5f550b2e1c879912033b1becbedb315accc75441b"}, 1599 | {file = "pydantic-2.5.1.tar.gz", hash = "sha256:0b8be5413c06aadfbe56f6dc1d45c9ed25fd43264414c571135c97dd77c2bedb"}, 1600 | ] 1601 | 1602 | [package.dependencies] 1603 | annotated-types = ">=0.4.0" 1604 | pydantic-core = "2.14.3" 1605 | typing-extensions = ">=4.6.1" 1606 | 1607 | [package.extras] 1608 | email = ["email-validator (>=2.0.0)"] 1609 | 1610 | [[package]] 1611 | name = "pydantic-core" 1612 | version = "2.14.3" 1613 | description = "" 1614 | optional = false 1615 | python-versions = ">=3.7" 1616 | files = [ 1617 | {file = "pydantic_core-2.14.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ba44fad1d114539d6a1509966b20b74d2dec9a5b0ee12dd7fd0a1bb7b8785e5f"}, 1618 | {file = "pydantic_core-2.14.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4a70d23eedd88a6484aa79a732a90e36701048a1509078d1b59578ef0ea2cdf5"}, 1619 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cc24728a1a9cef497697e53b3d085fb4d3bc0ef1ef4d9b424d9cf808f52c146"}, 1620 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab4a2381005769a4af2ffddae74d769e8a4aae42e970596208ec6d615c6fb080"}, 1621 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a12bf088d6fa20e094f9a477bf84bd823651d8b8384f59bcd50eaa92e6a52"}, 1622 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38aed5a1bbc3025859f56d6a32f6e53ca173283cb95348e03480f333b1091e7d"}, 1623 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1767bd3f6370458e60c1d3d7b1d9c2751cc1ad743434e8ec84625a610c8b9195"}, 1624 | {file = "pydantic_core-2.14.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7cb0c397f29688a5bd2c0dbd44451bc44ebb9b22babc90f97db5ec3e5bb69977"}, 1625 | {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ff737f24b34ed26de62d481ef522f233d3c5927279f6b7229de9b0deb3f76b5"}, 1626 | {file = "pydantic_core-2.14.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1a39fecb5f0b19faee9a8a8176c805ed78ce45d760259a4ff3d21a7daa4dfc1"}, 1627 | {file = "pydantic_core-2.14.3-cp310-none-win32.whl", hash = "sha256:ccbf355b7276593c68fa824030e68cb29f630c50e20cb11ebb0ee450ae6b3d08"}, 1628 | {file = "pydantic_core-2.14.3-cp310-none-win_amd64.whl", hash = "sha256:536e1f58419e1ec35f6d1310c88496f0d60e4f182cacb773d38076f66a60b149"}, 1629 | {file = "pydantic_core-2.14.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:f1f46700402312bdc31912f6fc17f5ecaaaa3bafe5487c48f07c800052736289"}, 1630 | {file = "pydantic_core-2.14.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:88ec906eb2d92420f5b074f59cf9e50b3bb44f3cb70e6512099fdd4d88c2f87c"}, 1631 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:056ea7cc3c92a7d2a14b5bc9c9fa14efa794d9f05b9794206d089d06d3433dc7"}, 1632 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076edc972b68a66870cec41a4efdd72a6b655c4098a232314b02d2bfa3bfa157"}, 1633 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e71f666c3bf019f2490a47dddb44c3ccea2e69ac882f7495c68dc14d4065eac2"}, 1634 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f518eac285c9632be337323eef9824a856f2680f943a9b68ac41d5f5bad7df7c"}, 1635 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dbab442a8d9ca918b4ed99db8d89d11b1f067a7dadb642476ad0889560dac79"}, 1636 | {file = "pydantic_core-2.14.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0653fb9fc2fa6787f2fa08631314ab7fc8070307bd344bf9471d1b7207c24623"}, 1637 | {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c54af5069da58ea643ad34ff32fd6bc4eebb8ae0fef9821cd8919063e0aeeaab"}, 1638 | {file = "pydantic_core-2.14.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc956f78651778ec1ab105196e90e0e5f5275884793ab67c60938c75bcca3989"}, 1639 | {file = "pydantic_core-2.14.3-cp311-none-win32.whl", hash = "sha256:5b73441a1159f1fb37353aaefb9e801ab35a07dd93cb8177504b25a317f4215a"}, 1640 | {file = "pydantic_core-2.14.3-cp311-none-win_amd64.whl", hash = "sha256:7349f99f1ef8b940b309179733f2cad2e6037a29560f1b03fdc6aa6be0a8d03c"}, 1641 | {file = "pydantic_core-2.14.3-cp311-none-win_arm64.whl", hash = "sha256:ec79dbe23702795944d2ae4c6925e35a075b88acd0d20acde7c77a817ebbce94"}, 1642 | {file = "pydantic_core-2.14.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8f5624f0f67f2b9ecaa812e1dfd2e35b256487566585160c6c19268bf2ffeccc"}, 1643 | {file = "pydantic_core-2.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c2d118d1b6c9e2d577e215567eedbe11804c3aafa76d39ec1f8bc74e918fd07"}, 1644 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe863491664c6720d65ae438d4efaa5eca766565a53adb53bf14bc3246c72fe0"}, 1645 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:136bc7247e97a921a020abbd6ef3169af97569869cd6eff41b6a15a73c44ea9b"}, 1646 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aeafc7f5bbddc46213707266cadc94439bfa87ecf699444de8be044d6d6eb26f"}, 1647 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e16aaf788f1de5a85c8f8fcc9c1ca1dd7dd52b8ad30a7889ca31c7c7606615b8"}, 1648 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc652c354d3362e2932a79d5ac4bbd7170757a41a62c4fe0f057d29f10bebb"}, 1649 | {file = "pydantic_core-2.14.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b92e72babfd56585c75caf44f0b15258c58e6be23bc33f90885cebffde3400"}, 1650 | {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75f3f534f33651b73f4d3a16d0254de096f43737d51e981478d580f4b006b427"}, 1651 | {file = "pydantic_core-2.14.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c9ffd823c46e05ef3eb28b821aa7bc501efa95ba8880b4a1380068e32c5bed47"}, 1652 | {file = "pydantic_core-2.14.3-cp312-none-win32.whl", hash = "sha256:12e05a76b223577a4696c76d7a6b36a0ccc491ffb3c6a8cf92d8001d93ddfd63"}, 1653 | {file = "pydantic_core-2.14.3-cp312-none-win_amd64.whl", hash = "sha256:1582f01eaf0537a696c846bea92082082b6bfc1103a88e777e983ea9fbdc2a0f"}, 1654 | {file = "pydantic_core-2.14.3-cp312-none-win_arm64.whl", hash = "sha256:96fb679c7ca12a512d36d01c174a4fbfd912b5535cc722eb2c010c7b44eceb8e"}, 1655 | {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:71ed769b58d44e0bc2701aa59eb199b6665c16e8a5b8b4a84db01f71580ec448"}, 1656 | {file = "pydantic_core-2.14.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:5402ee0f61e7798ea93a01b0489520f2abfd9b57b76b82c93714c4318c66ca06"}, 1657 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaab9dc009e22726c62fe3b850b797e7f0e7ba76d245284d1064081f512c7226"}, 1658 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92486a04d54987054f8b4405a9af9d482e5100d6fe6374fc3303015983fc8bda"}, 1659 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf08b43d1d5d1678f295f0431a4a7e1707d4652576e1d0f8914b5e0213bfeee5"}, 1660 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8ca13480ce16daad0504be6ce893b0ee8ec34cd43b993b754198a89e2787f7e"}, 1661 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44afa3c18d45053fe8d8228950ee4c8eaf3b5a7f3b64963fdeac19b8342c987f"}, 1662 | {file = "pydantic_core-2.14.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56814b41486e2d712a8bc02a7b1f17b87fa30999d2323bbd13cf0e52296813a1"}, 1663 | {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3dc2920cc96f9aa40c6dc54256e436cc95c0a15562eb7bd579e1811593c377e"}, 1664 | {file = "pydantic_core-2.14.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e483b8b913fcd3b48badec54185c150cb7ab0e6487914b84dc7cde2365e0c892"}, 1665 | {file = "pydantic_core-2.14.3-cp37-none-win32.whl", hash = "sha256:364dba61494e48f01ef50ae430e392f67ee1ee27e048daeda0e9d21c3ab2d609"}, 1666 | {file = "pydantic_core-2.14.3-cp37-none-win_amd64.whl", hash = "sha256:a402ae1066be594701ac45661278dc4a466fb684258d1a2c434de54971b006ca"}, 1667 | {file = "pydantic_core-2.14.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:10904368261e4509c091cbcc067e5a88b070ed9a10f7ad78f3029c175487490f"}, 1668 | {file = "pydantic_core-2.14.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:260692420028319e201b8649b13ac0988974eeafaaef95d0dfbf7120c38dc000"}, 1669 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1bf1a7b05a65d3b37a9adea98e195e0081be6b17ca03a86f92aeb8b110f468"}, 1670 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7abd17a838a52140e3aeca271054e321226f52df7e0a9f0da8f91ea123afe98"}, 1671 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5c51460ede609fbb4fa883a8fe16e749964ddb459966d0518991ec02eb8dfb9"}, 1672 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d06c78074646111fb01836585f1198367b17d57c9f427e07aaa9ff499003e58d"}, 1673 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af452e69446fadf247f18ac5d153b1f7e61ef708f23ce85d8c52833748c58075"}, 1674 | {file = "pydantic_core-2.14.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3ad4968711fb379a67c8c755beb4dae8b721a83737737b7bcee27c05400b047"}, 1675 | {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c5ea0153482e5b4d601c25465771c7267c99fddf5d3f3bdc238ef930e6d051cf"}, 1676 | {file = "pydantic_core-2.14.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96eb10ef8920990e703da348bb25fedb8b8653b5966e4e078e5be382b430f9e0"}, 1677 | {file = "pydantic_core-2.14.3-cp38-none-win32.whl", hash = "sha256:ea1498ce4491236d1cffa0eee9ad0968b6ecb0c1cd711699c5677fc689905f00"}, 1678 | {file = "pydantic_core-2.14.3-cp38-none-win_amd64.whl", hash = "sha256:2bc736725f9bd18a60eec0ed6ef9b06b9785454c8d0105f2be16e4d6274e63d0"}, 1679 | {file = "pydantic_core-2.14.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1ea992659c03c3ea811d55fc0a997bec9dde863a617cc7b25cfde69ef32e55af"}, 1680 | {file = "pydantic_core-2.14.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2b53e1f851a2b406bbb5ac58e16c4a5496038eddd856cc900278fa0da97f3fc"}, 1681 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c7f8e8a7cf8e81ca7d44bea4f181783630959d41b4b51d2f74bc50f348a090f"}, 1682 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3b9c91eeb372a64ec6686c1402afd40cc20f61a0866850f7d989b6bf39a41a"}, 1683 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ef3e2e407e4cad2df3c89488a761ed1f1c33f3b826a2ea9a411b0a7d1cccf1b"}, 1684 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f86f20a9d5bee1a6ede0f2757b917bac6908cde0f5ad9fcb3606db1e2968bcf5"}, 1685 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61beaa79d392d44dc19d6f11ccd824d3cccb865c4372157c40b92533f8d76dd0"}, 1686 | {file = "pydantic_core-2.14.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d41df8e10b094640a6b234851b624b76a41552f637b9fb34dc720b9fe4ef3be4"}, 1687 | {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c08ac60c3caa31f825b5dbac47e4875bd4954d8f559650ad9e0b225eaf8ed0c"}, 1688 | {file = "pydantic_core-2.14.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d8b3932f1a369364606417ded5412c4ffb15bedbcf797c31317e55bd5d920e"}, 1689 | {file = "pydantic_core-2.14.3-cp39-none-win32.whl", hash = "sha256:caa94726791e316f0f63049ee00dff3b34a629b0d099f3b594770f7d0d8f1f56"}, 1690 | {file = "pydantic_core-2.14.3-cp39-none-win_amd64.whl", hash = "sha256:2494d20e4c22beac30150b4be3b8339bf2a02ab5580fa6553ca274bc08681a65"}, 1691 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:fe272a72c7ed29f84c42fedd2d06c2f9858dc0c00dae3b34ba15d6d8ae0fbaaf"}, 1692 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e63a56eb7fdee1587d62f753ccd6d5fa24fbeea57a40d9d8beaef679a24bdd6"}, 1693 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7692f539a26265cece1e27e366df5b976a6db6b1f825a9e0466395b314ee48b"}, 1694 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af46f0b7a1342b49f208fed31f5a83b8495bb14b652f621e0a6787d2f10f24ee"}, 1695 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e2f9d76c00e805d47f19c7a96a14e4135238a7551a18bfd89bb757993fd0933"}, 1696 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:de52ddfa6e10e892d00f747bf7135d7007302ad82e243cf16d89dd77b03b649d"}, 1697 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:38113856c7fad8c19be7ddd57df0c3e77b1b2336459cb03ee3903ce9d5e236ce"}, 1698 | {file = "pydantic_core-2.14.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:354db020b1f8f11207b35360b92d95725621eb92656725c849a61e4b550f4acc"}, 1699 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:76fc18653a5c95e5301a52d1b5afb27c9adc77175bf00f73e94f501caf0e05ad"}, 1700 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2646f8270f932d79ba61102a15ea19a50ae0d43b314e22b3f8f4b5fabbfa6e38"}, 1701 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37dad73a2f82975ed563d6a277fd9b50e5d9c79910c4aec787e2d63547202315"}, 1702 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:113752a55a8eaece2e4ac96bc8817f134c2c23477e477d085ba89e3aa0f4dc44"}, 1703 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:8488e973547e8fb1b4193fd9faf5236cf1b7cd5e9e6dc7ff6b4d9afdc4c720cb"}, 1704 | {file = "pydantic_core-2.14.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3d1dde10bd9962b1434053239b1d5490fc31a2b02d8950a5f731bc584c7a5a0f"}, 1705 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2c83892c7bf92b91d30faca53bb8ea21f9d7e39f0ae4008ef2c2f91116d0464a"}, 1706 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:849cff945284c577c5f621d2df76ca7b60f803cc8663ff01b778ad0af0e39bb9"}, 1707 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa89919fbd8a553cd7d03bf23d5bc5deee622e1b5db572121287f0e64979476"}, 1708 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf15145b1f8056d12c67255cd3ce5d317cd4450d5ee747760d8d088d85d12a2d"}, 1709 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4cc6bb11f4e8e5ed91d78b9880774fbc0856cb226151b0a93b549c2b26a00c19"}, 1710 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:832d16f248ca0cc96929139734ec32d21c67669dcf8a9f3f733c85054429c012"}, 1711 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b02b5e1f54c3396c48b665050464803c23c685716eb5d82a1d81bf81b5230da4"}, 1712 | {file = "pydantic_core-2.14.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1f2d4516c32255782153e858f9a900ca6deadfb217fd3fb21bb2b60b4e04d04d"}, 1713 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0a3e51c2be472b7867eb0c5d025b91400c2b73a0823b89d4303a9097e2ec6655"}, 1714 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:df33902464410a1f1a0411a235f0a34e7e129f12cb6340daca0f9d1390f5fe10"}, 1715 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27828f0227b54804aac6fb077b6bb48e640b5435fdd7fbf0c274093a7b78b69c"}, 1716 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2979dc80246e18e348de51246d4c9b410186ffa3c50e77924bec436b1e36cb"}, 1717 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b28996872b48baf829ee75fa06998b607c66a4847ac838e6fd7473a6b2ab68e7"}, 1718 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ca55c9671bb637ce13d18ef352fd32ae7aba21b4402f300a63f1fb1fd18e0364"}, 1719 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:aecd5ed096b0e5d93fb0367fd8f417cef38ea30b786f2501f6c34eabd9062c38"}, 1720 | {file = "pydantic_core-2.14.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:44aaf1a07ad0824e407dafc637a852e9a44d94664293bbe7d8ee549c356c8882"}, 1721 | {file = "pydantic_core-2.14.3.tar.gz", hash = "sha256:3ad083df8fe342d4d8d00cc1d3c1a23f0dc84fce416eb301e69f1ddbbe124d3f"}, 1722 | ] 1723 | 1724 | [package.dependencies] 1725 | typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" 1726 | 1727 | [[package]] 1728 | name = "pydocstyle" 1729 | version = "6.3.0" 1730 | description = "Python docstring style checker" 1731 | optional = false 1732 | python-versions = ">=3.6" 1733 | files = [ 1734 | {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, 1735 | {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, 1736 | ] 1737 | 1738 | [package.dependencies] 1739 | snowballstemmer = ">=2.2.0" 1740 | 1741 | [package.extras] 1742 | toml = ["tomli (>=1.2.3)"] 1743 | 1744 | [[package]] 1745 | name = "pyflakes" 1746 | version = "2.4.0" 1747 | description = "passive checker of Python programs" 1748 | optional = false 1749 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 1750 | files = [ 1751 | {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, 1752 | {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, 1753 | ] 1754 | 1755 | [[package]] 1756 | name = "pygments" 1757 | version = "2.16.1" 1758 | description = "Pygments is a syntax highlighting package written in Python." 1759 | optional = false 1760 | python-versions = ">=3.7" 1761 | files = [ 1762 | {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, 1763 | {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, 1764 | ] 1765 | 1766 | [package.extras] 1767 | plugins = ["importlib-metadata"] 1768 | 1769 | [[package]] 1770 | name = "pyld" 1771 | version = "2.0.3" 1772 | description = "Python implementation of the JSON-LD API" 1773 | optional = false 1774 | python-versions = "*" 1775 | files = [ 1776 | {file = "PyLD-2.0.3.tar.gz", hash = "sha256:287445f888c3a332ccbd20a14844c66c2fcbaeab3c99acd506a0788e2ebb2f82"}, 1777 | ] 1778 | 1779 | [package.dependencies] 1780 | cachetools = "*" 1781 | frozendict = "*" 1782 | lxml = "*" 1783 | 1784 | [package.extras] 1785 | aiohttp = ["aiohttp"] 1786 | cachetools = ["cachetools"] 1787 | frozendict = ["frozendict"] 1788 | requests = ["requests"] 1789 | 1790 | [[package]] 1791 | name = "pymdown-extensions" 1792 | version = "10.3" 1793 | description = "Extension pack for Python Markdown." 1794 | optional = false 1795 | python-versions = ">=3.8" 1796 | files = [ 1797 | {file = "pymdown_extensions-10.3-py3-none-any.whl", hash = "sha256:77a82c621c58a83efc49a389159181d570e370fff9f810d3a4766a75fc678b66"}, 1798 | {file = "pymdown_extensions-10.3.tar.gz", hash = "sha256:94a0d8a03246712b64698af223848fd80aaf1ae4c4be29c8c61939b0467b5722"}, 1799 | ] 1800 | 1801 | [package.dependencies] 1802 | markdown = ">=3.2" 1803 | pyyaml = "*" 1804 | 1805 | [package.extras] 1806 | extra = ["pygments (>=2.12)"] 1807 | 1808 | [[package]] 1809 | name = "pyparsing" 1810 | version = "3.1.1" 1811 | description = "pyparsing module - Classes and methods to define and execute parsing grammars" 1812 | optional = false 1813 | python-versions = ">=3.6.8" 1814 | files = [ 1815 | {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, 1816 | {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, 1817 | ] 1818 | 1819 | [package.extras] 1820 | diagrams = ["jinja2", "railroad-diagrams"] 1821 | 1822 | [[package]] 1823 | name = "pytest" 1824 | version = "7.4.2" 1825 | description = "pytest: simple powerful testing with Python" 1826 | optional = false 1827 | python-versions = ">=3.7" 1828 | files = [ 1829 | {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, 1830 | {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, 1831 | ] 1832 | 1833 | [package.dependencies] 1834 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 1835 | exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} 1836 | iniconfig = "*" 1837 | packaging = "*" 1838 | pluggy = ">=0.12,<2.0" 1839 | tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} 1840 | 1841 | [package.extras] 1842 | testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] 1843 | 1844 | [[package]] 1845 | name = "pytest-cov" 1846 | version = "4.1.0" 1847 | description = "Pytest plugin for measuring coverage." 1848 | optional = false 1849 | python-versions = ">=3.7" 1850 | files = [ 1851 | {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, 1852 | {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, 1853 | ] 1854 | 1855 | [package.dependencies] 1856 | coverage = {version = ">=5.2.1", extras = ["toml"]} 1857 | pytest = ">=4.6" 1858 | 1859 | [package.extras] 1860 | testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] 1861 | 1862 | [[package]] 1863 | name = "pytest-randomly" 1864 | version = "3.15.0" 1865 | description = "Pytest plugin to randomly order tests and control random.seed." 1866 | optional = false 1867 | python-versions = ">=3.8" 1868 | files = [ 1869 | {file = "pytest_randomly-3.15.0-py3-none-any.whl", hash = "sha256:0516f4344b29f4e9cdae8bce31c4aeebf59d0b9ef05927c33354ff3859eeeca6"}, 1870 | {file = "pytest_randomly-3.15.0.tar.gz", hash = "sha256:b908529648667ba5e54723088edd6f82252f540cc340d748d1fa985539687047"}, 1871 | ] 1872 | 1873 | [package.dependencies] 1874 | pytest = "*" 1875 | 1876 | [[package]] 1877 | name = "python-dateutil" 1878 | version = "2.8.2" 1879 | description = "Extensions to the standard Python datetime module" 1880 | optional = false 1881 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 1882 | files = [ 1883 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 1884 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 1885 | ] 1886 | 1887 | [package.dependencies] 1888 | six = ">=1.5" 1889 | 1890 | [[package]] 1891 | name = "python-frontmatter" 1892 | version = "0.5.0" 1893 | description = "Parse and manage posts with YAML (or other) frontmatter" 1894 | optional = false 1895 | python-versions = "*" 1896 | files = [ 1897 | {file = "python-frontmatter-0.5.0.tar.gz", hash = "sha256:a9c2e90fc38e9f0c68d8b82299040f331ca3b8525ac7fa5f6beffef52b26c426"}, 1898 | {file = "python_frontmatter-0.5.0-py3-none-any.whl", hash = "sha256:a7dcdfdaf498d488dce98bfa9452f8b70f803a923760ceab1ebd99291d98d28a"}, 1899 | ] 1900 | 1901 | [package.dependencies] 1902 | PyYAML = "*" 1903 | six = "*" 1904 | 1905 | [[package]] 1906 | name = "pyyaml" 1907 | version = "6.0.1" 1908 | description = "YAML parser and emitter for Python" 1909 | optional = false 1910 | python-versions = ">=3.6" 1911 | files = [ 1912 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, 1913 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, 1914 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, 1915 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, 1916 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, 1917 | {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, 1918 | {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, 1919 | {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, 1920 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, 1921 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, 1922 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, 1923 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, 1924 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, 1925 | {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, 1926 | {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, 1927 | {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, 1928 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, 1929 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, 1930 | {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, 1931 | {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, 1932 | {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, 1933 | {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, 1934 | {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, 1935 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, 1936 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, 1937 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, 1938 | {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, 1939 | {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, 1940 | {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, 1941 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, 1942 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, 1943 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, 1944 | {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, 1945 | {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, 1946 | {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, 1947 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, 1948 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, 1949 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, 1950 | {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, 1951 | {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, 1952 | {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, 1953 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, 1954 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, 1955 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, 1956 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, 1957 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, 1958 | {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, 1959 | {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, 1960 | {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, 1961 | {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "pyyaml-env-tag" 1966 | version = "0.1" 1967 | description = "A custom YAML tag for referencing environment variables in YAML files. " 1968 | optional = false 1969 | python-versions = ">=3.6" 1970 | files = [ 1971 | {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, 1972 | {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, 1973 | ] 1974 | 1975 | [package.dependencies] 1976 | pyyaml = "*" 1977 | 1978 | [[package]] 1979 | name = "rdflib" 1980 | version = "6.3.2" 1981 | description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." 1982 | optional = false 1983 | python-versions = ">=3.7,<4.0" 1984 | files = [ 1985 | {file = "rdflib-6.3.2-py3-none-any.whl", hash = "sha256:36b4e74a32aa1e4fa7b8719876fb192f19ecd45ff932ea5ebbd2e417a0247e63"}, 1986 | {file = "rdflib-6.3.2.tar.gz", hash = "sha256:72af591ff704f4caacea7ecc0c5a9056b8553e0489dd4f35a9bc52dbd41522e0"}, 1987 | ] 1988 | 1989 | [package.dependencies] 1990 | isodate = ">=0.6.0,<0.7.0" 1991 | pyparsing = ">=2.1.0,<4" 1992 | 1993 | [package.extras] 1994 | berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"] 1995 | html = ["html5lib (>=1.0,<2.0)"] 1996 | lxml = ["lxml (>=4.3.0,<5.0.0)"] 1997 | networkx = ["networkx (>=2.0.0,<3.0.0)"] 1998 | 1999 | [[package]] 2000 | name = "regex" 2001 | version = "2023.8.8" 2002 | description = "Alternative regular expression module, to replace re." 2003 | optional = false 2004 | python-versions = ">=3.6" 2005 | files = [ 2006 | {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, 2007 | {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, 2008 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, 2009 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, 2010 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, 2011 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, 2012 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, 2013 | {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, 2014 | {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, 2015 | {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, 2016 | {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, 2017 | {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, 2018 | {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, 2019 | {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, 2020 | {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, 2021 | {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, 2022 | {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, 2023 | {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, 2024 | {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, 2025 | {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, 2026 | {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, 2027 | {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, 2028 | {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, 2029 | {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, 2030 | {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, 2031 | {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, 2032 | {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, 2033 | {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, 2034 | {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, 2035 | {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, 2036 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, 2037 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, 2038 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, 2039 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, 2040 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, 2041 | {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, 2042 | {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, 2043 | {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, 2044 | {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, 2045 | {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, 2046 | {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, 2047 | {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, 2048 | {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, 2049 | {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, 2050 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, 2051 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, 2052 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, 2053 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, 2054 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, 2055 | {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, 2056 | {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, 2057 | {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, 2058 | {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, 2059 | {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, 2060 | {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, 2061 | {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, 2062 | {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, 2063 | {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, 2064 | {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, 2065 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, 2066 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, 2067 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, 2068 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, 2069 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, 2070 | {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, 2071 | {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, 2072 | {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, 2073 | {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, 2074 | {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, 2075 | {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, 2076 | {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, 2077 | {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, 2078 | {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, 2079 | {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, 2080 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, 2081 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, 2082 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, 2083 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, 2084 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, 2085 | {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, 2086 | {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, 2087 | {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, 2088 | {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, 2089 | {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, 2090 | {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, 2091 | {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, 2092 | {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, 2093 | {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, 2094 | ] 2095 | 2096 | [[package]] 2097 | name = "requests" 2098 | version = "2.31.0" 2099 | description = "Python HTTP for Humans." 2100 | optional = false 2101 | python-versions = ">=3.7" 2102 | files = [ 2103 | {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, 2104 | {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, 2105 | ] 2106 | 2107 | [package.dependencies] 2108 | certifi = ">=2017.4.17" 2109 | charset-normalizer = ">=2,<4" 2110 | idna = ">=2.5,<4" 2111 | urllib3 = ">=1.21.1,<3" 2112 | 2113 | [package.extras] 2114 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 2115 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 2116 | 2117 | [[package]] 2118 | name = "restructuredtext-lint" 2119 | version = "1.4.0" 2120 | description = "reStructuredText linter" 2121 | optional = false 2122 | python-versions = "*" 2123 | files = [ 2124 | {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, 2125 | ] 2126 | 2127 | [package.dependencies] 2128 | docutils = ">=0.11,<1.0" 2129 | 2130 | [[package]] 2131 | name = "rich" 2132 | version = "13.6.0" 2133 | description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" 2134 | optional = false 2135 | python-versions = ">=3.7.0" 2136 | files = [ 2137 | {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, 2138 | {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, 2139 | ] 2140 | 2141 | [package.dependencies] 2142 | markdown-it-py = ">=2.2.0" 2143 | pygments = ">=2.13.0,<3.0.0" 2144 | 2145 | [package.extras] 2146 | jupyter = ["ipywidgets (>=7.5.1,<9)"] 2147 | 2148 | [[package]] 2149 | name = "safety" 2150 | version = "1.10.3" 2151 | description = "Checks installed dependencies for known vulnerabilities." 2152 | optional = false 2153 | python-versions = ">=3.5" 2154 | files = [ 2155 | {file = "safety-1.10.3-py2.py3-none-any.whl", hash = "sha256:5f802ad5df5614f9622d8d71fedec2757099705c2356f862847c58c6dfe13e84"}, 2156 | {file = "safety-1.10.3.tar.gz", hash = "sha256:30e394d02a20ac49b7f65292d19d38fa927a8f9582cdfd3ad1adbbc66c641ad5"}, 2157 | ] 2158 | 2159 | [package.dependencies] 2160 | Click = ">=6.0" 2161 | dparse = ">=0.5.1" 2162 | packaging = "*" 2163 | requests = "*" 2164 | setuptools = "*" 2165 | 2166 | [[package]] 2167 | name = "setuptools" 2168 | version = "68.2.2" 2169 | description = "Easily download, build, install, upgrade, and uninstall Python packages" 2170 | optional = false 2171 | python-versions = ">=3.8" 2172 | files = [ 2173 | {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, 2174 | {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, 2175 | ] 2176 | 2177 | [package.extras] 2178 | docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] 2179 | testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] 2180 | testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] 2181 | 2182 | [[package]] 2183 | name = "sh" 2184 | version = "2.0.6" 2185 | description = "Python subprocess replacement" 2186 | optional = false 2187 | python-versions = ">=3.8.1,<4.0" 2188 | files = [ 2189 | {file = "sh-2.0.6-py3-none-any.whl", hash = "sha256:ced8f2e081a858b66a46ace3703dec243779abbd5a1887ba7e3c34f34da70cd2"}, 2190 | {file = "sh-2.0.6.tar.gz", hash = "sha256:9b2998f313f201c777e2c0061f0b1367497097ef13388595be147e2a00bf7ba1"}, 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "six" 2195 | version = "1.16.0" 2196 | description = "Python 2 and 3 compatibility utilities" 2197 | optional = false 2198 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 2199 | files = [ 2200 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 2201 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 2202 | ] 2203 | 2204 | [[package]] 2205 | name = "smmap" 2206 | version = "5.0.1" 2207 | description = "A pure Python implementation of a sliding window memory map manager" 2208 | optional = false 2209 | python-versions = ">=3.7" 2210 | files = [ 2211 | {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, 2212 | {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, 2213 | ] 2214 | 2215 | [[package]] 2216 | name = "snowballstemmer" 2217 | version = "2.2.0" 2218 | description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." 2219 | optional = false 2220 | python-versions = "*" 2221 | files = [ 2222 | {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, 2223 | {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, 2224 | ] 2225 | 2226 | [[package]] 2227 | name = "stevedore" 2228 | version = "5.1.0" 2229 | description = "Manage dynamic plugins for Python applications" 2230 | optional = false 2231 | python-versions = ">=3.8" 2232 | files = [ 2233 | {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, 2234 | {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, 2235 | ] 2236 | 2237 | [package.dependencies] 2238 | pbr = ">=2.0.0,<2.1.0 || >2.1.0" 2239 | 2240 | [[package]] 2241 | name = "termcolor" 2242 | version = "2.3.0" 2243 | description = "ANSI color formatting for output in terminal" 2244 | optional = false 2245 | python-versions = ">=3.7" 2246 | files = [ 2247 | {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, 2248 | {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, 2249 | ] 2250 | 2251 | [package.extras] 2252 | tests = ["pytest", "pytest-cov"] 2253 | 2254 | [[package]] 2255 | name = "tokenize-rt" 2256 | version = "5.2.0" 2257 | description = "A wrapper around the stdlib `tokenize` which roundtrips." 2258 | optional = false 2259 | python-versions = ">=3.8" 2260 | files = [ 2261 | {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"}, 2262 | {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"}, 2263 | ] 2264 | 2265 | [[package]] 2266 | name = "toml" 2267 | version = "0.10.2" 2268 | description = "Python Library for Tom's Obvious, Minimal Language" 2269 | optional = false 2270 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 2271 | files = [ 2272 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 2273 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 2274 | ] 2275 | 2276 | [[package]] 2277 | name = "tomli" 2278 | version = "2.0.1" 2279 | description = "A lil' TOML parser" 2280 | optional = false 2281 | python-versions = ">=3.7" 2282 | files = [ 2283 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 2284 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 2285 | ] 2286 | 2287 | [[package]] 2288 | name = "tomlkit" 2289 | version = "0.11.8" 2290 | description = "Style preserving TOML library" 2291 | optional = false 2292 | python-versions = ">=3.7" 2293 | files = [ 2294 | {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, 2295 | {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, 2296 | ] 2297 | 2298 | [[package]] 2299 | name = "typer" 2300 | version = "0.9.0" 2301 | description = "Typer, build great CLIs. Easy to code. Based on Python type hints." 2302 | optional = false 2303 | python-versions = ">=3.6" 2304 | files = [ 2305 | {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, 2306 | {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, 2307 | ] 2308 | 2309 | [package.dependencies] 2310 | click = ">=7.1.1,<9.0.0" 2311 | typing-extensions = ">=3.7.4.3" 2312 | 2313 | [package.extras] 2314 | all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] 2315 | dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] 2316 | doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] 2317 | test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] 2318 | 2319 | [[package]] 2320 | name = "typing-extensions" 2321 | version = "4.8.0" 2322 | description = "Backported and Experimental Type Hints for Python 3.8+" 2323 | optional = false 2324 | python-versions = ">=3.8" 2325 | files = [ 2326 | {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, 2327 | {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, 2328 | ] 2329 | 2330 | [[package]] 2331 | name = "urllib3" 2332 | version = "1.26.17" 2333 | description = "HTTP library with thread-safe connection pooling, file post, and more." 2334 | optional = false 2335 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 2336 | files = [ 2337 | {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"}, 2338 | {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"}, 2339 | ] 2340 | 2341 | [package.extras] 2342 | brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] 2343 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] 2344 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 2345 | 2346 | [[package]] 2347 | name = "urlpath" 2348 | version = "1.2.0" 2349 | description = "Object-oriented URL from `urllib.parse` and `pathlib`" 2350 | optional = false 2351 | python-versions = "~=3.4" 2352 | files = [ 2353 | {file = "urlpath-1.2.0-py3-none-any.whl", hash = "sha256:9c175c4ce014e1c25bbc20984e75b2d05597cab915c3569b5e457acff2e692ad"}, 2354 | {file = "urlpath-1.2.0.tar.gz", hash = "sha256:e54c0c82db4894a7217772150bdbc01413794576996e7834f81d67f22359c9d0"}, 2355 | ] 2356 | 2357 | [package.dependencies] 2358 | requests = "*" 2359 | 2360 | [package.extras] 2361 | json = ["jmespath"] 2362 | test = ["WebOb", "jmespath"] 2363 | 2364 | [[package]] 2365 | name = "watchdog" 2366 | version = "3.0.0" 2367 | description = "Filesystem events monitoring" 2368 | optional = false 2369 | python-versions = ">=3.7" 2370 | files = [ 2371 | {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, 2372 | {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, 2373 | {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, 2374 | {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, 2375 | {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, 2376 | {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, 2377 | {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, 2378 | {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, 2379 | {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, 2380 | {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, 2381 | {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, 2382 | {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, 2383 | {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, 2384 | {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, 2385 | {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, 2386 | {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, 2387 | {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, 2388 | {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, 2389 | {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, 2390 | {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, 2391 | {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, 2392 | {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, 2393 | {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, 2394 | {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, 2395 | {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, 2396 | {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, 2397 | {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, 2398 | ] 2399 | 2400 | [package.extras] 2401 | watchmedo = ["PyYAML (>=3.10)"] 2402 | 2403 | [[package]] 2404 | name = "wcmatch" 2405 | version = "8.5" 2406 | description = "Wildcard/glob file name matcher." 2407 | optional = false 2408 | python-versions = ">=3.8" 2409 | files = [ 2410 | {file = "wcmatch-8.5-py3-none-any.whl", hash = "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5"}, 2411 | {file = "wcmatch-8.5.tar.gz", hash = "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"}, 2412 | ] 2413 | 2414 | [package.dependencies] 2415 | bracex = ">=2.1.1" 2416 | 2417 | [[package]] 2418 | name = "wemake-python-styleguide" 2419 | version = "0.17.0" 2420 | description = "The strictest and most opinionated python linter ever" 2421 | optional = false 2422 | python-versions = ">=3.7,<4.0" 2423 | files = [ 2424 | {file = "wemake-python-styleguide-0.17.0.tar.gz", hash = "sha256:c8869fac392019c2bb3eae4287399245d10d2726b23f1b3c68d1564909c3a71a"}, 2425 | {file = "wemake_python_styleguide-0.17.0-py3-none-any.whl", hash = "sha256:d10b953bbe4fba83a34f4c224a0e1849ede89e486eacfc760690e6c87a28eaae"}, 2426 | ] 2427 | 2428 | [package.dependencies] 2429 | astor = ">=0.8,<0.9" 2430 | attrs = "*" 2431 | darglint = ">=1.2,<2.0" 2432 | flake8 = ">=3.7,<5" 2433 | flake8-bandit = ">=2.1,<4" 2434 | flake8-broken-line = ">=0.5,<0.6" 2435 | flake8-bugbear = ">=22.9,<23.0" 2436 | flake8-commas = ">=2.0,<3.0" 2437 | flake8-comprehensions = ">=3.1,<4.0" 2438 | flake8-debugger = ">=4.0,<5.0" 2439 | flake8-docstrings = ">=1.3,<2.0" 2440 | flake8-eradicate = ">=1.0,<2.0" 2441 | flake8-isort = ">=4.0,<5.0" 2442 | flake8-quotes = ">=3.0,<4.0" 2443 | flake8-rst-docstrings = ">=0.2,<0.3" 2444 | flake8-string-format = ">=0.3,<0.4" 2445 | pep8-naming = ">=0.13,<0.14" 2446 | pygments = ">=2.4,<3.0" 2447 | typing_extensions = ">=4.0,<5.0" 2448 | 2449 | [[package]] 2450 | name = "zipp" 2451 | version = "3.17.0" 2452 | description = "Backport of pathlib-compatible object wrapper for zip files" 2453 | optional = false 2454 | python-versions = ">=3.8" 2455 | files = [ 2456 | {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, 2457 | {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, 2458 | ] 2459 | 2460 | [package.extras] 2461 | docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] 2462 | testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] 2463 | 2464 | [metadata] 2465 | lock-version = "2.0" 2466 | python-versions = ">=3.8.1,<4.0" 2467 | content-hash = "ab0529fd6a9431041c81117bd8edf80c9a8edb31d4b0a158bc9dc98fa3f3202d" 2468 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["poetry>=1.0"] 3 | build-backend = "poetry.masonry.api" 4 | 5 | 6 | [tool.poetry] 7 | name = "documented" 8 | version = "0.1.4" 9 | description = "Templated docstrings for Python classes." 10 | license = "MIT" 11 | 12 | authors = ["Anatoly Scherbakov "] 13 | 14 | readme = "README.md" 15 | 16 | repository = "https://github.com/anatoly-scherbakov/documented" 17 | 18 | keywords = [] 19 | 20 | classifiers = [ 21 | "Development Status :: 3 - Alpha", 22 | "Intended Audience :: Developers", 23 | "Operating System :: OS Independent", 24 | "Topic :: Software Development :: Libraries :: Python Modules", 25 | ] 26 | 27 | [tool.poetry.dependencies] 28 | python = ">=3.8.1,<4.0" 29 | 30 | [tool.poetry.group.dev.dependencies] 31 | 32 | # This prevents flake8-commas from crashing. 33 | mkdocs-macros-plugin = "^0.7.0" 34 | mkdocstrings = {extras = ["python"], version = ">=0.23,<0.25"} 35 | attrs = ">=22.1,<24.0" 36 | pydantic = "^2.4.2" 37 | jeeves-yeti-pyproject = {version = "^0.2.25", python = ">=3.10"} 38 | mkdocs-awesome-pages-plugin = "^2.9.2" 39 | 40 | [tool.flakeheaven.exceptions."**/__init__.py"] 41 | pyflakes = ["-F401"] 42 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anatoly-scherbakov/documented/d166ffffb76677a471a266c17e881bf4c1871686/tests/__init__.py -------------------------------------------------------------------------------- /tests/common.py: -------------------------------------------------------------------------------- 1 | import dataclasses 2 | from typing import Dict 3 | 4 | from documented import Documented 5 | 6 | 7 | @dataclasses.dataclass 8 | class Country(Documented): 9 | """ 10 | Country with regions list. 11 | 12 | Example region: {self.regions[AL]}. 13 | """ 14 | 15 | regions: Dict[str, str] 16 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from documented.untouchable import Untouchable 4 | from tests.common import Country 5 | 6 | 7 | @pytest.fixture 8 | def united_states() -> Country: 9 | return Country( 10 | regions={ 11 | 'AL': 'Alabama', 12 | # ... 13 | }, 14 | ) 15 | 16 | 17 | @pytest.fixture 18 | def untouchable() -> Untouchable: 19 | return Untouchable() 20 | -------------------------------------------------------------------------------- /tests/test_documented.py: -------------------------------------------------------------------------------- 1 | from tests.common import Country 2 | 3 | 4 | def test_access_by_key(united_states: Country): 5 | """Template can access lists and dicts by index and key.""" 6 | assert str(united_states) == ( 7 | 'Country with regions list.\n\n' 8 | 'Example region: Alabama.' # noqa: WPS326 9 | ) 10 | -------------------------------------------------------------------------------- /tests/test_error.py: -------------------------------------------------------------------------------- 1 | import dataclasses 2 | 3 | import pytest 4 | 5 | from documented import DocumentedError 6 | 7 | 8 | class NoDocstring(DocumentedError): 9 | ... 10 | 11 | 12 | def test_no_docstring(): 13 | with pytest.raises(NoDocstring) as error_info: 14 | raise NoDocstring() 15 | 16 | assert str(error_info.value) == 'NoDocstring()' 17 | 18 | 19 | class NotAWizard(DocumentedError): 20 | """{self.name}, sorry to say that you are not a wizard.""" 21 | 22 | def __init__(self, name: str): 23 | """This is not a dataclass and requires a constructor.""" 24 | self.name = name 25 | 26 | 27 | @dataclasses.dataclass 28 | class YouHaveLiedToMe(DocumentedError): 29 | """If I were you, {self.username}, I'd sue my face for slander.""" 30 | 31 | username: str 32 | 33 | 34 | class FailingError(DocumentedError): 35 | """This error cannot be {self.rendered} :(""" # noqa: D400 36 | 37 | 38 | def test_plain_inheritance(): 39 | """Just inherit your class from DocumentedError to get all the perks.""" 40 | with pytest.raises(NotAWizard) as err: 41 | raise NotAWizard(name='Rincewind') 42 | 43 | assert str(err.value) == ( # noqa: WPS441 44 | 'Rincewind, sorry to say that you are not a wizard.' 45 | ) 46 | 47 | 48 | def test_dataclass(): 49 | """If exception is a dataclass, constructor is provided for you.""" 50 | with pytest.raises(YouHaveLiedToMe) as err: 51 | raise YouHaveLiedToMe(username='Rincewind') 52 | 53 | assert str(err.value) == ( # noqa: WPS441 54 | "If I were you, Rincewind, I'd sue my face for slander." 55 | ) 56 | 57 | 58 | def test_rendering_failure(): 59 | """Docstring template of this particular class is invalid.""" 60 | with pytest.raises(FailingError) as err: 61 | raise FailingError() 62 | 63 | with pytest.raises(AttributeError): # noqa: WPS441 64 | str(err.value) # noqa: WPS441 65 | -------------------------------------------------------------------------------- /tests/test_rich.py: -------------------------------------------------------------------------------- 1 | import rich 2 | 3 | from tests.common import Country 4 | 5 | 6 | def test_rich(united_states: Country): 7 | rich.print(united_states) 8 | -------------------------------------------------------------------------------- /tests/test_untouchable.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from documented.untouchable import Untouchable 4 | 5 | 6 | def test_call(untouchable: Untouchable): 7 | with pytest.raises(Exception): 8 | assert untouchable() 9 | 10 | 11 | def test_attribute(untouchable: Untouchable): 12 | with pytest.raises(Exception): 13 | assert untouchable.attribute 14 | 15 | 16 | def test_index(untouchable: Untouchable): 17 | with pytest.raises(Exception): 18 | assert untouchable['attribute'] 19 | 20 | 21 | def test_string(untouchable: Untouchable): 22 | with pytest.raises(Exception): 23 | assert str(untouchable) 24 | 25 | 26 | def test_repr(untouchable: Untouchable): 27 | with pytest.raises(Exception): 28 | assert repr(untouchable) 29 | --------------------------------------------------------------------------------