From 6e1d398930d953527e575696ee1d7d688fedb1f5 Mon Sep 17 00:00:00 2001 From: Florian Maas Date: Fri, 15 Apr 2022 16:37:42 +0200 Subject: [PATCH] Mkdocs (#30) * converted docs to mkdocs --- .github/workflows/on-merge-to-main.yml | 2 +- .github/workflows/on-pull-request.yml | 2 +- .github/workflows/on-release-main.yml | 10 +- Makefile | 16 +- README.rst | 2 - docs/.DS_Store | Bin 6148 -> 0 bytes docs/conf.py | 56 ----- docs/contents.rst | 8 - docs/contributing.rst | 1 - docs/feature_details.rst | 15 -- docs/features.md | 0 docs/features/cicd.md | 41 ++++ docs/features/cicd.rst | 30 --- docs/features/formatting.md | 20 ++ docs/features/formatting.rst | 18 -- docs/features/makefile.md | 25 ++ docs/features/makefile.rst | 39 --- docs/features/poetry.md | 23 ++ docs/features/poetry.rst | 19 -- docs/features/publishing.md | 54 +++++ docs/features/pytest.md | 14 ++ docs/features/pytest.rst | 13 - docs/features/releasing.rst | 53 ----- docs/features/sphinx.md | 44 ++++ docs/features/sphinx.rst | 40 ---- docs/features/tox.md | 12 + docs/features/tox.rst | 14 -- docs/images/GitHub-Mark-120px-plus.png | Bin 4268 -> 0 bytes docs/index.md | 64 +++++ docs/index.rst | 1 - docs/prompt_arguments.md | 69 ++++++ docs/prompt_arguments.rst | 59 ----- .../images => static}/artifactory.png | Bin docs/tutorial.md | 125 ++++++++++ docs/tutorial.rst | 95 -------- mkdocs.yml | 34 +++ poetry.lock | 225 +++++++++++++++++- pyproject.toml | 2 + 38 files changed, 756 insertions(+), 489 deletions(-) delete mode 100644 docs/.DS_Store delete mode 100644 docs/conf.py delete mode 100644 docs/contents.rst delete mode 100644 docs/contributing.rst delete mode 100644 docs/feature_details.rst create mode 100644 docs/features.md create mode 100644 docs/features/cicd.md delete mode 100644 docs/features/cicd.rst create mode 100644 docs/features/formatting.md delete mode 100644 docs/features/formatting.rst create mode 100644 docs/features/makefile.md delete mode 100644 docs/features/makefile.rst create mode 100644 docs/features/poetry.md delete mode 100644 docs/features/poetry.rst create mode 100644 docs/features/publishing.md create mode 100644 docs/features/pytest.md delete mode 100644 docs/features/pytest.rst delete mode 100644 docs/features/releasing.rst create mode 100644 docs/features/sphinx.md delete mode 100644 docs/features/sphinx.rst create mode 100644 docs/features/tox.md delete mode 100644 docs/features/tox.rst delete mode 100644 docs/images/GitHub-Mark-120px-plus.png create mode 100644 docs/index.md delete mode 100644 docs/index.rst create mode 100644 docs/prompt_arguments.md delete mode 100644 docs/prompt_arguments.rst rename docs/{_static/images => static}/artifactory.png (100%) create mode 100644 docs/tutorial.md delete mode 100644 docs/tutorial.rst create mode 100644 mkdocs.yml diff --git a/.github/workflows/on-merge-to-main.yml b/.github/workflows/on-merge-to-main.yml index b97e00b..506d006 100644 --- a/.github/workflows/on-merge-to-main.yml +++ b/.github/workflows/on-merge-to-main.yml @@ -24,7 +24,7 @@ jobs: - name: Documentation Test run: | source .venv/bin/activate - make docs-test + make docs-verify tox: runs-on: ubuntu-latest diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index e3b2c3a..0a06870 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -21,7 +21,7 @@ jobs: - name: Documentation Test run: | source .venv/bin/activate - make docs-test + make docs-verify tox: runs-on: ubuntu-latest diff --git a/.github/workflows/on-release-main.yml b/.github/workflows/on-release-main.yml index 59b8512..ba47f1b 100644 --- a/.github/workflows/on-release-main.yml +++ b/.github/workflows/on-release-main.yml @@ -22,7 +22,7 @@ jobs: - name: Documentation Test run: | source .venv/bin/activate - make docs-test + make docs-verify tox: runs-on: ubuntu-latest @@ -83,10 +83,4 @@ jobs: - name: Generate documentation run: | source .venv/bin/activate - make docs-build - - - name: Deploy documentation to GitHub pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/_build \ No newline at end of file + mkdocs gh-deploy \ No newline at end of file diff --git a/Makefile b/Makefile index a182b42..8ff06b8 100644 --- a/Makefile +++ b/Makefile @@ -41,19 +41,11 @@ publish: ## publish a release to pypi. build-and-publish: build publish ## Build and publish. -docs-test: ## Test Sphinx documentation. - @sphinx-build docs docs/_build -W --keep-going +docs-verify: ## Check if MkDocs build does not return warnings or errors + @mkdocs build -s -docs-clean: ## Clean the docs/_build folder - @rm -rf docs/_build/* - -docs-build: ## Build the documentation - @sphinx-build docs docs/_build - -docs-open: ## Open the documentation - @open docs/_build/index.html - -docs: docs-clean docs-build docs-open ## Build and open the documentation +docs-serve: ## Build and serve the MkDocs documentation + @mkdocs serve .PHONY: help diff --git a/README.rst b/README.rst index f474a06..8b2bec4 100644 --- a/README.rst +++ b/README.rst @@ -36,8 +36,6 @@ Cookiecutter Poetry This is a `cookiecutter `_ repository to generate the file structure for a Python project that uses `Poetry `_ for its dependency management. -+-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ -| **Github repository** | `https://github.com/fpgmaas/cookiecutter-poetry/ `_ | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ | **Documentation** | `https://fpgmaas.github.io/cookiecutter-poetry/ `_ | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/.DS_Store b/docs/.DS_Store deleted file mode 100644 index cd3a2cf86a516c8064df523e3cb54a7528c4c45a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOKQU~5S>X)F?8c)mbyZ2AcAuOU!aACP{;>bnzdIsSC7^=pN;Ew=WfCq7(Hn; zPeO0u@ra0SKVLT@ortt>L%G>7H`_O#*(xIngyW38d|Ze3^YL;%%(8zE823@$ - Tutorial - Feature Details - Prompt arguments - Contributing \ No newline at end of file diff --git a/docs/contributing.rst b/docs/contributing.rst deleted file mode 100644 index 3bdd7dc..0000000 --- a/docs/contributing.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../CONTRIBUTING.rst \ No newline at end of file diff --git a/docs/feature_details.rst b/docs/feature_details.rst deleted file mode 100644 index 5e73034..0000000 --- a/docs/feature_details.rst +++ /dev/null @@ -1,15 +0,0 @@ -==================== -Feature Details -==================== - -.. toctree:: - :maxdepth: 2 - - features/poetry - features/makefile - features/pytest - features/formatting - features/cicd - features/releasing - features/sphinx - features/tox diff --git a/docs/features.md b/docs/features.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/features/cicd.md b/docs/features/cicd.md new file mode 100644 index 0000000..88dddfa --- /dev/null +++ b/docs/features/cicd.md @@ -0,0 +1,41 @@ +--- +title: CI/CD with Github actions +--- + +when `include_github_actions` is set to `"y"`, a `.github` directory is +added with the following structure: + + .github + ├── workflows + ├─── run-checks + │ └── action.yml + ├─── setup-poetry-env + │ └── action.yml + ├── on-merge-to-main.yml + ├── on-pull-request.yml + └── on-release-main.yml + +`on-merge-to-main.yml` and `on-pull-request.yml` are identical except +for their trigger conditions; the first is run whenever a new commit is +made to `main` (which should +[only](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches) +happen through merge requests, hence the name), and the latter is run +whenever a pull request is opened or updated. They call the `action.yml` +files to set-up the environment, run the tests, and check the code +formatting. + +`on-release-main.yml` does all of the former whenever a new release is +made on the `main` branch. In addition, `on-release-main.yml` also +publishes the project to Pypi or Artifactory if `publish_to` is set to +`"pypi"` or `"artifactory"`, and it builds and deploys the documentation +if `sphinx_docs` is set to `"y"`. To learn more about these features, +see `Releasing to Pypi or Artifactory <./releasing>`{.interpreted-text +role="doc"} and `Documentation with Sphinx +<./sphinx>`{.interpreted-text role="doc"} + +Additionally, all workflows check for compatibility with multiple Python +versions if `tox` is set to `"y"`. + +## Example CI/CD Pipeline + +[![Example pipeline](https://raw.githubusercontent.com/fpgmaas/cookiecutter-poetry/main/static/images/pipeline.png)](https://raw.githubusercontent.com/fpgmaas/cookiecutter-poetry/main/static/images/pipeline.png) \ No newline at end of file diff --git a/docs/features/cicd.rst b/docs/features/cicd.rst deleted file mode 100644 index 882b997..0000000 --- a/docs/features/cicd.rst +++ /dev/null @@ -1,30 +0,0 @@ -CI/CD with Github actions ---------------------------------------- - -when ``include_github_actions`` is set to ``"y"``, a ``.github`` directory is added with the following structure: - -:: - - .github - ├── workflows - ├─── run-checks - │ └── action.yml - ├─── setup-poetry-env - │ └── action.yml - ├── on-merge-to-main.yml - ├── on-pull-request.yml - └── on-release-main.yml - -``on-merge-to-main.yml`` and ``on-pull-request.yml`` are identical except for their trigger conditions; the first is run -whenever a new commit is made to ``main`` (which should `only -`_ -happen through merge requests, hence the name), and the latter is run whenever a pull request is opened or updated. They -call the ``action.yml`` files to set-up the environment, run the tests, and check the code formatting. - -``on-release-main.yml`` does all of the former whenever a new release is made on the ``main`` branch. In addition, -``on-release-main.yml`` also publishes the project to Pypi or Artifactory if ``publish_to`` is set to ``"pypi"`` or -``"artifactory"``, and it builds and deploys the documentation if ``sphinx_docs`` is set to ``"y"``. To learn more about -these features, see :doc:`Releasing to Pypi or Artifactory <./releasing>` and :doc:`Documentation with Sphinx -<./sphinx>` - -Additionally, all workflows check for compatibility with multiple Python versions if ``tox`` is set to ``"y"``. diff --git a/docs/features/formatting.md b/docs/features/formatting.md new file mode 100644 index 0000000..7946c86 --- /dev/null +++ b/docs/features/formatting.md @@ -0,0 +1,20 @@ +--- +title: Formatting +--- + +[isort](https://pycqa.github.io/isort/index.html) and +[black](https://pypi.org/project/black/) are added as development +dependencies. `black` and `isort` can be used to format the code with + +``` bash +make format +``` + +And the code style can be checked with + +``` bash +make lint +``` + +If `include_github_actions` is set to `"y"`, code formatting is checked +for every merge request, every merge to main, and every release. diff --git a/docs/features/formatting.rst b/docs/features/formatting.rst deleted file mode 100644 index 485c9f6..0000000 --- a/docs/features/formatting.rst +++ /dev/null @@ -1,18 +0,0 @@ -=============== -Formatting -=============== - -`isort `_ and `black `_ are added -as development dependencies. ``black`` and ``isort`` can be used to format the code with - -.. code-block:: bash - - make format - -All three packages can be used to verify the code formatting with - -.. code-block:: bash - - make lint - -If ``include_github_actions`` is set to ``"y"``, code formatting is checked for every merge request, every merge to main, and every release. \ No newline at end of file diff --git a/docs/features/makefile.md b/docs/features/makefile.md new file mode 100644 index 0000000..c1af17d --- /dev/null +++ b/docs/features/makefile.md @@ -0,0 +1,25 @@ +--- +title: Makefile +--- + +The generated repository will have a `Makefile` available. A list of all +available commands that are available can be obtained by running +`make help` in the terminal. Initially, the following commands are +available: + +``` +install Install the poetry environment +format Format code using isort and black. +lint Check code formatting using isort and black. +test Test the code with pytest +build Build wheel file using poetry +clean-build clean build artifacts +publish publish a release to pypi. +build-and-publish Build and publish. +docs-generate convert docstrings to docs +docs-build Build the docs +docs-open Open the docs in the browser +docs Generate, build and open the docs. +docs-build-test Test if the documentation can be built without errors. +docs-test Test if the documentation can be generated and built without errors. +``` diff --git a/docs/features/makefile.rst b/docs/features/makefile.rst deleted file mode 100644 index f249b0e..0000000 --- a/docs/features/makefile.rst +++ /dev/null @@ -1,39 +0,0 @@ -============ -Makefile -============ - -The generated repository will have a ``Makefile`` available. A list of all available commands that are available can be obtained by -running ``make help`` in the terminal. Initially, the following commands are available: - -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Command | Description | -+========================+============================================================================================================================================================+ -| ``install`` | Install the poetry environment | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``format`` | Format code using isort and black. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``lint`` | Check code formatting using isort and black. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``test`` | Test the code with pytest | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``build`` | Build wheel file using poetry | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``clean-build`` | clean build artifacts | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``publish`` | Available if ``publish_to`` is set to ``"pypi"`` or ``"artifactory"``. Publishes to the specified index. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``build-and-publish`` | Available if ``publish_to`` is set to ``"pypi"`` or ``"artifactory"``. Build and publish. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs-generate`` | Available if ``sphinx_docs`` is set to ``"y"``. Convert docstrings to ``rst``-files to prepare for building documentation with Sphinx. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs-build`` | Available if ``sphinx_docs`` is set to ``"y"``. Build documentation with sphinx. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs-open`` | Available if ``sphinx_docs`` is set to ``"y"``. Open the docs in the browser. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs`` | Available if ``sphinx_docs`` is set to ``"y"``. Generate and build documentation with Sphinx, and directly open the documentation in the browser. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs-build-test`` | Available if ``sphinx_docs`` is set to ``"y"``. Test if the documentation can be built without errors. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ``docs-test`` | Available if ``sphinx_docs`` is set to ``"y"``. Test if the documentation can be generated and built without errors. | -+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+ - diff --git a/docs/features/poetry.md b/docs/features/poetry.md new file mode 100644 index 0000000..5134e5c --- /dev/null +++ b/docs/features/poetry.md @@ -0,0 +1,23 @@ +--- +title: Poetry +--- + +The generated repository will uses [Poetry](https://python-Poetry.org/) +for its dependency management. When you have created your repository +using this cookiecutter template, a Poetry environment is pre-configured +in `pyproject.toml` and `Poetry.toml`. All you need to do is add your +project-specific dependencies with + +``` bash +poetry add +``` + +and then install the environment with + +``` bash +make install +``` + +By default, the environment is created in a `.venv` folder, so you can +easily start an interactive shell within the environment with +`poetry shell`. diff --git a/docs/features/poetry.rst b/docs/features/poetry.rst deleted file mode 100644 index ded0c12..0000000 --- a/docs/features/poetry.rst +++ /dev/null @@ -1,19 +0,0 @@ -======= -Poetry -======= - -The generated repository will uses `Poetry `_ for its dependency management. When you have -created your repository using this cookiecutter template, a poetry environment is pre-configured in ``pyproject.toml`` -and ``poetry.toml``. All you need to do is add your project-specific dependencies with - -.. code-block:: bash - - poetry add - -and then install the environment with - -.. code-block:: bash - - make install - -By default, the environment is created in a ``.venv`` folder, so you can easily start an interactive shell within the environment with ``poetry shell``. \ No newline at end of file diff --git a/docs/features/publishing.md b/docs/features/publishing.md new file mode 100644 index 0000000..e02771c --- /dev/null +++ b/docs/features/publishing.md @@ -0,0 +1,54 @@ + +# Publishing to Pypi or Artifactory + +# Releasing from Github + +When `publish_to` is set to `"pypi"` or `"artifactory"`, the +`on-release-main.yml` workflow publishes the code to +[Pypi](https://pypi.org) or [Artifactory](https://jfrog.com/artifactory) +respectively whenever a new release is made. + +Before you can trigger the release workflow, you need to add some secrets to your github repository so +they can be used as environment variables. + +## Set-up for Pypi + +In order to publish to Pypi, the secret `PYPI_TOKEN` should be set in +your repository. In your Github repository, navigate to +`Settings > Secrets > Actions` and press `New repository secret`. As the +name of the secret, set `PYPI_TOKEN`. Then, in a new tab go to your +[Pypi Account settings](https://pypi.org/manage/account/) and select +`Add API token`. Copy and paste the token in the `Value` +field for the Github secret in your first tab, and you're all set! + +## Set-up for Artifactory + +In order to release to `Artifactory`, visit your Artifactory +instance and open `Quick setup`. You should see something like this: + +![image](../static/artifactory.png){width="700px"} + +You should add these as secrets to your repository with the names +`ARTIFACTORY_URL`, `ARTIFACTORY_USERNAME` and `ARTIFACTORY_PASSWORD` +respectively. To do so, in your Github repository, navigate to +`Settings > Secrets > Actions` and create a secret by pressing +`New repository secret` to add the secrets one by one. + +# How to trigger a release? + +To trigger a new release, navigate to your repository on GitHub, click ``Releases`` on the right, and then select `Draft +a new release`. If you fail to find the button, you could also directly visit +`https://github.com///releases/new`. + +Give your release a title, and add a new tag in the form `*.*.*` where the +`*`'s are alphanumeric. To finish, press `Publish release`. + +# Releasing locally + +It is also possible to release locally, although it is not recommended. +To do so, set the repository secrets listed in the sections above as +environment variables on your local machine instead, and run + +``` bash +make build-and-publish +``` diff --git a/docs/features/pytest.md b/docs/features/pytest.md new file mode 100644 index 0000000..6590a3b --- /dev/null +++ b/docs/features/pytest.md @@ -0,0 +1,14 @@ +--- +title: Pytest +--- + +[pytest](https://docs.pytest.org/en/7.1.x/) is automatically added to +the environment. There will be a template unittest in the `tests` +directory upon creation of the project, which can be run with + +``` bash +make test +``` + +If `include_github_actions` is set to `"y"`, the tests are automatically +run for every merge request, every merge to main, and every release. diff --git a/docs/features/pytest.rst b/docs/features/pytest.rst deleted file mode 100644 index 89c543b..0000000 --- a/docs/features/pytest.rst +++ /dev/null @@ -1,13 +0,0 @@ -======= -Pytest -======= - -`pytest `_ is automatically added to the environment. -There will be a template unittests in the ``tests`` directory upon creation of the project, which can be run with - -.. code-block:: bash - - make test - -If ``include_github_actions`` is set to ``"y"``, the tests are automatically run for every merge request, -every merge to main, and every release. \ No newline at end of file diff --git a/docs/features/releasing.rst b/docs/features/releasing.rst deleted file mode 100644 index 6de858a..0000000 --- a/docs/features/releasing.rst +++ /dev/null @@ -1,53 +0,0 @@ -============================================= -Releasing to Pypi or Artifactory -============================================= - -.. contents:: :local: - :depth: 3 - - -Releasing from Github ---------------------------------------------- - -When ``publish_to`` is set to ``"pypi"`` or ``"artifactory"``, the ``.github/on-release-main.yml`` publishes the code to -`Pypi `_ or `Artifactory `_ respectively whenever a new release is -made. - -Before you can trigger the release workflow, some environment variables are required. - -Set-up for Pypi -~~~~~~~~~~~~~~~~~~~~ - -In order to release to Pypi, the secret ``PYPI_TOKEN`` should be set in your repository. In your Github repository, navigate to ``Settings > Secrets > Actions`` and press -``New repository secret``. As the name of the secret, set ``PYPI_TOKEN``. Then, in a new tab go to your `Pypi Account settings `_ -and select `Add API token`. Copy and paste the token in the ``Value`` field for the Github secret in your first tab, and you're all set! - -Set-up for Artifactory -~~~~~~~~~~~~~~~~~~~~~~~~~ - -In order to release to `Artifactory`, visit your Artifactory instance and open ``Quick setup``. You should see something like this: - -.. image:: ../_static/images/artifactory.png - :width: 700 - -You should add these as secrets to your repository with the names ``ARTIFACTORY_URL``, ``ARTIFACTORY_USERNAME`` and ``ARTIFACTORY_PASSWORD`` respectively. -To do so, in your Github repository, navigate to ``Settings > Secrets > Actions`` and create a secret by pressing ``New repository secret`` to add the secrets one by one. - -How to trigger a release? -------------------------- - -To trigger a new release, click the ``Draft a new release`` button on your repository's homepage. If you fail to find -the button, you could also directly visit ``https://github.com///releases/new``. - -Give your release a title, add a new tag in the form ``*.*.*`` where the ``*``'s are alphanumeric. To finish, press ``Publish -release``. - -Releasing locally ----------------------- - -It is also possible to release locally, although it is not recommended. To do so, set the repository secrets listed in the sections above -as environment variables on your local machine instead, and run - -.. code-block:: bash - - make build-and-publish diff --git a/docs/features/sphinx.md b/docs/features/sphinx.md new file mode 100644 index 0000000..c143a19 --- /dev/null +++ b/docs/features/sphinx.md @@ -0,0 +1,44 @@ +--- +title: Documentation with Sphinx +--- + +If `sphinx_docs` is set to `"y"`, documentation of your project is +automatically added using +[sphinx](https://www.sphinx-doc.org/en/master/). Next to that, if +`"include_github_actions"` is set to `"y"`, the documentation is +automatically deployed to your `gh-pages` branch, and made available at +`https://.github.io//`. + +To view the documentation locally, simply run + +``` bash +make docs +``` + +This command will generate, build and directly open your documentation +in the browser. + +# Documenting docstrings + +The generated project uses `sphinx-apidoc` to automatically convert all +your docstrings into legible documentation. By default, the project is +configured to work with +[google](https://google.github.io/styleguide/pyguide.html) style +docstrings. + +An example of a Google style docstring: + +``` python +def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: +"""Example function with PEP 484 type annotations. + +Args: + param1: The first parameter. + param2: The second parameter. + +Returns: + The return value. True for success, False otherwise. +``` + +For more examples, see +[here](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). diff --git a/docs/features/sphinx.rst b/docs/features/sphinx.rst deleted file mode 100644 index 77471f9..0000000 --- a/docs/features/sphinx.rst +++ /dev/null @@ -1,40 +0,0 @@ -===================================== -Documentation with Sphinx -===================================== - -If ``sphinx_docs`` is set to ``"y"``, documentation of your project is automatically added using `sphinx `_. -Next to that, if ``"include_github_actions"`` is set to ``"y"``, the documentation is automatically deployed to your ``gh-pages`` branch, -and made available at ``https://.github.io//``. - -To view the documentation locally, simply run - -.. code-block:: bash - - make docs - -This command will generate, build and directly open your documentation in the browser. - -Documenting docstrings -------------------------- - -The generated project uses ``sphinx-apidoc`` to automatically convert all your docstrings into legible documentation. By -default, the project is configured to work with `google -`_ style docstrings. - -An example of a Google style docstring: - -.. code-block:: python - - def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: - """Example function with PEP 484 type annotations. - - Args: - param1: The first parameter. - param2: The second parameter. - - Returns: - The return value. True for success, False otherwise. - - -For more examples, see -`here `_. diff --git a/docs/features/tox.md b/docs/features/tox.md new file mode 100644 index 0000000..a2d4d03 --- /dev/null +++ b/docs/features/tox.md @@ -0,0 +1,12 @@ +--- +title: Tox +--- + +If `tox` is set to `"y"` project uses [Tox](https://tox.wiki/en/latest/) +to test compatibility with multiple Python versions. By default, the +project is tested with Python `3.7`, `3.8`, `3.9`, and `3.10`. Testing +is done automatically in the CI/CD pipeline on every pull request, merge +to main, and on each release. + +If you want to add more Python versions you can simply add them to +`tox.ini` and to the separate workflows in `.github`. diff --git a/docs/features/tox.rst b/docs/features/tox.rst deleted file mode 100644 index ec033d9..0000000 --- a/docs/features/tox.rst +++ /dev/null @@ -1,14 +0,0 @@ -================== -Tox -================== - -If ``tox`` is set to ``"y"`` project uses `Tox `_ to test compatibility with multiple Python versions. By default, -the project is tested with Python ``3.7``, ``3.8``, ``3.9``, and ``3.10``. Testing is done automatically in the CI/CD -pipeline on every pull request, merge to main, and on each release. - -If you want to add more Python versions you can simply add them to ``tox.ini`` and to the separate workflows in ``.github``. - - - - - diff --git a/docs/images/GitHub-Mark-120px-plus.png b/docs/images/GitHub-Mark-120px-plus.png deleted file mode 100644 index ea6ff545a246caa64074ba809bbc86fcb8589071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4268 zcmaJ_c|25m+@2YcEGe=tO+zT_42H4qTL_VT8D=nHX3PwRki9HfBH7BIQ7JCj_beeI z(PA%IQuZumf5*MI`@VnN`<~A^=eL~adA{p8f1EgTGXqv8J|+MFz-nZuYe^f)M;9Xl z?T$df2WbN@Nzaya1?NEuL=w;dEfmfT4L0&cdZI1SNK}yDE3_&AKqrE+vL)G?nkc*D ze5H{`7-_OEp2h|MR5i$Wq`Nno1a?DvVz6qEm4+4w7=u!S*eICFn&NfPUKqn*0{Tj@ znU#C6w>ts_(NG7gl9g!!zGxB>O!oD`5|znnkUw>mY4f9P83_1K2+3Ow@|RP#rsiNB z903hhkd~8jmxV&XaJV#7UI7k=N`hgsP?(G??SxA~<&_oS$}mOn-v@+djezn{w$#=C z+ZJu52Js@1@X9hWfq{Y2fpXF~f~O1=fj}H-z+h4|gcLCdOG1*RuteeC3c6^bI{||y zVQ^URks{I!=TB0D&^-Ms1Yi6=vRLBZX`&@ehK$6^K&54mLi!CfHU0mgzP|sUi6l$( z|N8r{!bGbeJX*#QO~m;V+-ZgL5I!=6SJok*kt7_!3WxLgokepm90^DC!r{R>SKwfA zQ=~fvd$e)kPllD+ zRvxaUgpifj{ms?Ix%>N~v83Nz6pahhl84G`Y3tCq(0}C~HG?mnW?2_azyzRC`UIRW z_|Kq~G5_t0?0@_67Z>#}zWf~rt)x_q6t=RejnvErW>9V+3xJmC z`WZuvjAn72w+0gZ!c zA#ROc&m%S~RCo}xuD5jUEbXg(tZCM@w!T|#S$ju3+PKnZvOq!Te!k1i>ZlAY2d$hq zcr3hl)6*dTc>dY=Qd5hg9F-3ZJx12?th3 zY?KG;EA_?MEA`bUgvx84mEd_1K6WD6Zh&~3v&UiJT=<@uGaZ9%(IN9U?-o?uhZNz# z0#o|=;zl}_TF1jsmf+jyEQ<#bNr0KCAUYnr%4g{D(N{m#MffRnz-^cE<1DqGVEx5r zS9<&IEpl`xM442IxYkCk*}6`7oUa@Kl_Om(Wi)GrS2ItP;Ou5QroVSmsVXN0)hk8e z;lQ7wszq5KKkzMEul9)W#^WhAdM9n0$1xd~J`)gN+?&lyrT2u#TL&e_WNZu=06!YS z_X6e%y?CXFn(qe)=6ByvLZ1sdi9L_*4O%9s*q`)g@<+ngXLPynb=p>5ndD-SPd(4C`aTbdZ?bxKHELC zZeth7;3PqZD?s#@He`g7m$B$qvPY*AnR5l@#vg7e+&xsaNZJ7s<$W$OK|T@wSM zh`E>hGt7-jtmLJrt}Ivhf&`2+J~l%A7}}Xca7jJxI^wvclcjQLM5Eta<3kf9Toscy z2I56cmFzMI1s+2ser!B|B({ns8CaFV`-AdpPxNlkWi`M4xfYlJ>bcQa_Db9t&LAY; zx^2E~@4$Karl&<}9jvxNSjTQMt#zzn;Qqi*Jw&F8Na(c1_Jsc6N8&(xJElah#X~^m zO$FtV=RBR5){5SC5(*jhk?uKK7`fi`Y}eJ#ci%vh-fi6~JE0;=vP_jpjlbT?{#e-Q zg~+X2Dcc7K^U`4_pWG;HNCdX~rJUssvKg;+f3y~ob_om7(fWQVrk~|8c+5Oyh)!0u zH&@f%C3-|i_!B$Ex|tDNvP7;t@z^Uj(%<;2W8RZEAuh0EPbru^)k9_D$^x*({E+n& z{y0*heI0x$J9Uj|T}LA6SZHS^U1@BX{##YX50iv${&P>g_W{k;`KLa}>>L)9+be$H za1Hq$db|JP;I|C#s!D6abpfQ!SMEJxNrX5Po=~2~$zN$@d{C4ae%`0;u5lJIc<5zV zW0x;w_KUnGPtktlP2P#J6QNQr*8K9PVlhCrtEJW_VcAdqvfOn2!G(Z&x2T5n3f@d6yv9qGdpFIWgxra94$P&Yhsnc!#t)-Gv2pxFx>U@5&M# z7#U*2+|*`pSdAT(GQiPE$Ex`}N+I!wwb~zatxGDuvCL1$dV-cI>A&21r3eoG;Lk8> zhmAcpb*$KgS=PzD#t!=+rn>kYXx#YR)Dn+tD7G%>f%NHRvzUhtr}1(z(HiB$A-%vD z`5X-Jp!>%UspC}u?_WmmD;h%*I*Zz09eZ~A{G;;OSqJ&?c>WA=&gyqG%p)(6V*26E z{`k1QNoE~O9dKi0)Wme|c} zpD9V60svR6jT^^lPq@XY4fnzWFP@(qA|#AoRZ#%ui7nS&g(Xw!JO=DIRz0X4b&exr zkY`td`J1Q{ea9M&%2%T#Ta;&a<1sj6L)n2PV_y7NO8EsgholQRo&m^2^@skl2bJt` zu{-&e43fXh6JRAQ*3k{gK53WkKIN2vD)Z{THopDGy|Ji5&I%H;Ecs!{lt{IB9_h<_F@CJB{)}FVpTFvK zXP(=eD=e5uI3>NH`X-wAtvibZtmZ?rL z7wsuLRIVuCeEjQ}R}+ZAfvu;^h{(w;f2~*YCtDTpuuti0eA}tHeTR8%o~dzA^q5{z zUQNy_)>BQCr4&n zY9ifZI%XxIcTU~-B#>+|02RG{!zI=^*x31j0>MV-*^bTh_(BK8Ju&5MRoaw8+1sG1 zL%CEWY*}Ha7nicSa&3PfVrP_f!DVI}!S&!{Ym;aR{feM{vMO6NOZr%GWB(&Z`wMOR z#)*@43&=FFCXmN^kEWAz)MHgZ6DzNPf8RC_rbOG((u3cI+!P)?mdoPYwy+W=xS^mz zfWC?vOdizPc*paTy;7&k%4PvouNbGIDHnoj<91_&*-aZqO)}LOa&*pZeF>N7l>Pz< zd;rv0z9>AUFFFYW!822_#dpkxb^lmTJyFw~@j`t0>4*7~9p0D`MHX1=O>e$JdK(YU zaj~=9#M%X_gvkYeC*Lkko|dT;vWBG#k0&O6W2g6_Mv4}FWx^J#7cBEjg3w2YH@g)Q zuPcXBzOk0d9;`^u*e`sV2s~bPHkR-tDYRo6Xua4hTUwLG+tvh)QIX*oR|Y1Ov28Zk zylyfJyrpjDH=Jjhz5$=Jg(|PB@fV!q?btPZ{rS$TKfdo!+1YTi23~<47U94_5&pH} znfUigS(B@ik&Xh(E?Ua@PItu=bDG)ZUT{R;eznP5G{Em}%@vdRrM`+tN6I(JQMxzt zzG?+!S4Ta~BX5?vtMn^pahCg%YIEzN%1z!wZj%6cu}N6lF1c=c&0t!fJ{z?E+8|pX ztL03D#Wef7T$WgBgBg5GX1JT$UHCk!=iSaW`dgj`dWdyaEzWVS!D%kH>i&#|Y?8|9 z-4$lE_MykI*a<$47lk7Bjbdv}w_`*zdXZuGN3Iu`_YOWZs2xJ(qa;J)R&SUlR@|sR zt8oL;Vk6BgD)ama+gNdT3rq5$E=wTS_vPNL5v7O8(WRT)ia$MvhreFxtoojl@A>L* z?V3N9{Or`QzB8zrK~Wzy9(B6iNvvA2IDC!4FDT_F{|-W_zsO%Zd!zcZU$$SrY)QbT z+}KQlk=a`^_W*hzPZ#yMhjHq8PQ9i6db5c4WxBN_N7p?>>OOl+NcT)WrFk4NdiE{l z;%pD)D#!i39~nk@^PUQri!2Iu0oQ(*7KqFFs)#t$B7j`oGM}O2VyLY`9N-5vh@n;< zRNIc6&UJhY@?%IVdD-=xjGWJqn^0=jZBU)tv{v1U7ED&2v5=oi(iJ2&r=CAe0V;*$ zW$8S9fv(wveNqLlBQuhxlIr{{L<<*+21HMjNzwF5+p`Q`+5~JF9k>|vUCpaTL{(Py zw>le+8;vV|Ci0p)i8;A|+2>n*&Llb{e1az3q!#5`h2t?5>RN5A0%e*-$ySQrj$M&HIK~a9W)6d?W8J*D|_Nsk$ zGP@D92-<(_m%Dt`w&=aK1L=et-x-8!#A~nMjd>p5y_E~xqvBa(g-xz$rbrZzJy}@V zMDqqtV5Q@0Jnd^ZegdA!J_j+KUwf*Q89r!GpX^tCjM-_vCiKDr%LHG*Tq?b|4*FY1 zr|I5VzQbkN?NfI!QSV9w{6i7N+PZuZNn#B7s)KDhPO1TQJe zZL1UgBIOOdRP;I*>7?O<3ezgLDn5OQ67L#>r1#{bKe8hz0Pg XLyRvu{aX3a{{tgEGu={c*U0|?Dtn-9 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..5d9d0ce --- /dev/null +++ b/docs/index.md @@ -0,0 +1,64 @@ + +# Cookiecutter Poetry + + +This is a [cookiecutter](https://github.com/cookiecutter/cookiecutter) +repository to generate the file structure for a Python project that uses +[Poetry](https://python-poetry.org/) for its dependency management. + +A project generated with ``cookiecutter-poetry`` supports the following features: + +- [Poetry](https://python-poetry.org/) for dependency management. +- CI/CD with [GitHub Actions](https://github.com/features/actions) +- Formatting with [black](https://pypi.org/project/black/) and [isort](https://pycqa.github.io/isort/index.html) +- Publishing to [Pypi](https://pypi.org) or [Artifactory](https://jfrog.com/artifactory) by creating a new release on GitHub. +- Testing with [pytest](https://docs.pytest.org/en/7.1.x/) +- Documentation with [sphinx](https://www.sphinx-doc.org/en/master/) +- Compatibility testing with [Tox](https://tox.wiki/en/latest/) + +An example of a repository generated with this package can be found [here](https://github.com/fpgmaas/cookiecutter-poetry-example). + +## Quickstart + +On your local machine, navigate to the directory in which you want to +create a project directory, and run the following two commands: + +``` bash +pip install cookiecutter-poetry +ccp +``` + +Alternatively, install `cookiecutter` and directly pass the URL to this +Github repository to the `cookiecutter` command: + +``` bash +pip install cookiecutter +cookiecutter https://github.com/fpgmaas/cookiecutter-poetry.git +``` + +Then run the following commands, replacing ``, with the +name that you also gave the Github repository and +`` with your Github username. + +``` bash +cd +git init -b main +git add . +git commit -m "Init commit" +git remote add origin git@github.com:/.git +git push -u origin main +``` + +Finally, install the environment with `make install`. + +If you want to deploy to Pypi or Artifactory automatically on each +release, you need to set some secrets in your repository on Github. For +more information, see [the +documentation](https://fpgmaas.github.io/cookiecutter-poetry/features/releasing.html). + +## Acknowledgements + +This project is partially based on [Audrey +Feldroy's](https://github.com/audreyfeldroy) great +[cookiecutter-pypackage](https://github.com/audreyfeldroy/cookiecutter-pypackage). + diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 6b2b3ec..0000000 --- a/docs/index.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../README.rst \ No newline at end of file diff --git a/docs/prompt_arguments.md b/docs/prompt_arguments.md new file mode 100644 index 0000000..ec07e11 --- /dev/null +++ b/docs/prompt_arguments.md @@ -0,0 +1,69 @@ +# Prompt arguments + +When running the command ``ccp`` a prompt will start which enables you to configure your repository. The +prompt values and their explanation are as follows: + +--- + +**author** + + Your full name. + +**email** + +Your email address. + +**author_github_handle** + +Your github handle, i.e. `` in `https://github.com/` + +**project_name** + +Your project name. Should be equal to the name of your repository +and it should only contain alphanumeric characters and `-`'s. + +**project_slug** + +The project slug, will default to the `project_name` with all `-`'s +replaced with `_`. This will be how you import your code later, e.g. + +``` python +from `` in ``https://github.com/`` - -**project_name** - Your project name. Should be equal to the name of your repository and it should only contain alphanumeric characters and ``-``'s. - -**project_slug** - The project slug, will default to the ``project_name`` with all ``-``'s replaced with ``_``. - This will be how you import your code later, e.g. - - .. code-block:: python - - from import foo - -**project_description** - A short description of your project. - -**include_github_actions** - ``"y"`` or ``"n"``. Adds a ``.github`` directory with various actions and workflows to setup the environment and run code formatting checks and unittests. - -**publish_to** - ``"pypi"``, ``"artifactory"``, or ``"none"``. Adds functionality to the ``Makefile`` and Github workflows to make publishing - your code as simple as creating a new release release on Github. - For more info, see :doc:`Releasing to Pypi or Artifactory <./features/releasing>`. - -**sphinx_docs** - ``"y"`` or ``"n"``. Adds `sphinx `_ documentation to your project. This includes automatically parsing your - docstrings and adding them to the documentation. Documentation will be deployed to the ``gh-pages`` branch. - -**tox** - ``"y"`` or ``"n"`` Adds automatic `Tox `_ testing for compatibility with multiple versions of Python. - -**open_source_license** - Choose a `license `_. Options: ``["1. MIT License", "2. BSD license", "3. ISC license", - "4. Apache Software License 2.0", "5. GNU General Public License v3", "6. Not open source"]`` diff --git a/docs/_static/images/artifactory.png b/docs/static/artifactory.png similarity index 100% rename from docs/_static/images/artifactory.png rename to docs/static/artifactory.png diff --git a/docs/tutorial.md b/docs/tutorial.md new file mode 100644 index 0000000..3ff5bc6 --- /dev/null +++ b/docs/tutorial.md @@ -0,0 +1,125 @@ +# Tutorial + +This page contains a complete tutorial on how to create your project. + +## Step 1: Install poetry + +To start, we will need to install `poetry`. The instructions to install poetry can be found +[here](https://python-poetry.org/docs/). After installing, it is recommended to run + +``` bash +poetry config virtualenvs.in-project true +``` + +which will by default create new virtual environments in `./.venv` +whenever you create them with `poetry init`. + +## Step 2: Install pyenv (Optional) + +I would recommend to use `pyenv` for managing your different Python versions. However, if you prefer anohter method of +managing your Python versions, feel free to skip this step and continue to [step 3](#step-3-generate-your-project). + +The instructions to install pyenv can be found [here](https://github.com/pyenv/pyenv). The instructions to install +poetry can be found [here](https://python-poetry.org/docs/). + +Then, install a version of Python with pyenv. To see a list of available +versions, run: + +``` bash +pyenv install --list +``` + +Select a version and install it with + +``` bash +pyenv install -v 3.9.7 +``` + +Replacing `3.9.7` with a version of your choosing. + +## Step 3: Generate your project + +First, navigate to the directory in which you want the project to be +created. Then, we need to install `cookiecutter-poetry` with the +following command: + +``` bash +pip install cookiecutter-poetry +``` + +Within the directory in which you want to create your project, run: + +``` bash +ccp +``` + +For an explanation of the prompt arguments, see +[Prompt Arguments](../prompt_arguments). + +An alternative to the steps above would be to install `cookiecutter` and +directly pass the URL to Github repository to the `cookiecutter` +command: + +``` bash +pip install cookiecutter-poetry +cookiecutter https://github.com/fpgmaas/cookiecutter-poetry.git +``` + +## Step 4: Set up your Github repository + +Create an empty [new repository](https://github.com/new) on Github. Give +it a name that only contains alphanumeric characters and optionally `-`. +DO NOT check any boxes under the option `Initialize this repository +with`. + +## Step 5: Upload your project to Github + +Run the following commands, replacing `` with the name +that you also gave the Github repository and `` +with your Github username. + +``` bash +cd +git init -b main +git add . +git commit -m "Init commit" +git remote add origin git@github.com:/.git +git push -u origin main +``` + +## Step 6: Activate your environment + +Install and activate the environment by running: + +``` bash +poetry install +poetry shell +``` + +## Step 7: Configure your repository secrets + +If you want to deploy your project to Pypi or Artifactory using the +Github Actions, you will have to set some repository secrets. For +instructions on how to do that, see [here](./features/publishing.md#set-up-for-pypi) for PyPi, or +[here](./features/publishing.md#set-up-for-artifactory) for Artifactory. + +## Step 8: Create a new release + +To trigger a new release, navigate to your repository on GitHub, click ``Releases`` on the right, and then select `Draft +a new release`. If you fail to find the button, you could also directly visit +`https://github.com///releases/new`. + +Give your release a title, and add a new tag in the form `*.*.*` where the +`*`'s are alphanumeric. To finish, press `Publish release`. + +## Step 9: Enable your documentation + +In your repository, navigate to ``Settings > Code and Automation > Pages``. If you succesfully created a new release, +you should see a notification saying `` Your site is ready to be published at https://.github.io//``. + +To finalize deploying your documentation, under ``Source``, select the branch ``gh-pages``. + +## Step 10: You're all set! + +That's it! I hope this repository saved you a lot of manual configuration. If you have any improvement suggestions, feel +free to raise an issue or open a PR on Github! diff --git a/docs/tutorial.rst b/docs/tutorial.rst deleted file mode 100644 index 31f6f92..0000000 --- a/docs/tutorial.rst +++ /dev/null @@ -1,95 +0,0 @@ -========== -Tutorial -========== - -This page contains a complete tutorial on how to create your project. - -Step 1: Install pyenv and poetry ------------------------------------- - -To start, we will need to install ``pyenv`` and ``poetry``. The instructions to install pyenv can be found `here `_. -The instructions to install poetry can be found `here `__. - -Then, install a version of Python with pyenv. To see a list of available versions, run: - -.. code-block:: bash - - pyenv install --list - -Select a version and install it with - -.. code-block:: bash - - pyenv install -v 3.9.7 - -Replacing ``3.9.7`` with a version of your choosing. - -It is also recommended to run - -.. code-block:: bash - - poetry config virtualenvs.in-project true - -which will by default create new virtual environments in ``./.venv`` whenever you create them with ``poetry init``. - -Step 2: Generate your project ------------------------------- - -First, navigate to the directory in which you want the project to be created. Then, we need to install ``cookiecutter-poetry`` with the following command: - -.. code-block:: bash - - pip install cookiecutter-poetry - -Within the directory in which you want to create your project, run: - -.. code-block:: bash - - ccp - -For an explanation of the prompt arguments, see :doc:`Prompt arguments <./prompt_arguments>`. - -An alternative to the steps above would be to install ``cookiecutter`` and directly pass the URL to Github repository to the ``cookiecutter`` command: - -.. code-block:: bash - - pip install cookiecutter-poetry - cookiecutter https://github.com/fpgmaas/cookiecutter-poetry.git - - -Step 3: Set up your Github repository ----------------------------------------- - -Create an empty `new repository `_ on Github. -Give it a name that only contains alphanumeric characters and optionally ``-``. -DO NOT check any boxes under the option *'Initialize this repository with'*. - -Step 4: Upload your project to Github --------------------------------------- - -Run the following commands, replacing ```` with the name that you also gave the Github repository and ```` with your Github username. - -.. code-block:: bash - - cd - git init -b main - git add . - git commit -m "Init commit" - git remote add origin git@github.com:/.git - git push -u origin main - -Step 5: Activate your environment --------------------------------------- - -Install and activate the environment by running: - -.. code-block:: bash - - poetry install - poetry shell - -Step 6: Configure your repository secrets -------------------------------------------- - -If you want to deploy your project to Pypi or Artifactory using the Github Actions, you will have to set some repository secrets. -For instructions on how to do that, see :doc:`Releasing to Pypi or Artifactory <./features/releasing>`. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..744dfae --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,34 @@ +site_name: cookiecutter-poetry +repo_url: https://github.com/fpgmaas/cookiecutter-poetry +site_url: https://fpgmaas.github.io/cookiecutter-poetry +site_description: A cookiecutter template for Python projects that use Poetry for its dependency management +site_author: Florian Maas + +nav: + - Home: index.md + - Features: + - CI/CD with Github Actions: features/cicd.md + - Formatting with black and isort: features/formatting.md + - Makefile: features/makefile.md + - Dependency management with Poetry: features/poetry.md + - Publishing to PyPi or Artifactory: features/publishing.md + - Testing with Pytest: features/pytest.md + - Documentation with Sphinx: features/sphinx.md + - Compatibility testing with Tox: features/tox.md + - Tutorial: tutorial.md + - Prompt Arguments: prompt_arguments.md +plugins: + - search +copyright: Maintained by Florian. +theme: + name: material + feature: + tabs: true + palette: + primary: white + accent: blue +markdown_extensions: + - toc: + permalink: true + - pymdownx.arithmatex: + generic: true \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 3f35187..20098a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -178,6 +178,20 @@ python-versions = ">=3.7" docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +[[package]] +name = "ghp-import" +version = "2.0.2" +description = "Copy your docs directly to the gh-pages branch." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["twine", "markdown", "flake8", "wheel"] + [[package]] name = "idna" version = "3.3" @@ -259,6 +273,20 @@ python-versions = "*" arrow = "*" jinja2 = "*" +[[package]] +name = "markdown" +version = "3.3.6" +description = "Python implementation of Markdown." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +testing = ["coverage", "pyyaml"] + [[package]] name = "markupsafe" version = "2.1.1" @@ -267,6 +295,61 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mkdocs" +version = "1.3.0" +description = "Project documentation with Markdown." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +click = ">=3.3" +ghp-import = ">=1.0" +importlib-metadata = ">=4.3" +Jinja2 = ">=2.10.2" +Markdown = ">=3.2.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +PyYAML = ">=3.10" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] + +[[package]] +name = "mkdocs-material" +version = "8.2.9" +description = "A Material Design theme for MkDocs" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +jinja2 = ">=2.11.1" +markdown = ">=3.2" +mkdocs = ">=1.3.0" +mkdocs-material-extensions = ">=1.0.3" +pygments = ">=2.10" +pymdown-extensions = ">=9.0" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.0.3" +description = "Extension pack for Python Markdown." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-extensions" version = "0.4.3" @@ -279,7 +362,7 @@ python-versions = "*" name = "packaging" version = "21.3" description = "Core utilities for Python packages" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -341,15 +424,26 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" name = "pygments" version = "2.11.2" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" +category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "pymdown-extensions" +version = "9.3" +description = "Extension pack for Python Markdown." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Markdown = ">=3.2" + [[package]] name = "pyparsing" version = "3.0.8" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" +category = "main" optional = false python-versions = ">=3.6.8" @@ -423,6 +517,25 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyyaml = "*" + [[package]] name = "requests" version = "2.27.1" @@ -670,6 +783,17 @@ six = ">=1.9.0,<2" docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +[[package]] +name = "watchdog" +version = "2.1.7" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "zipp" version = "3.8.0" @@ -685,7 +809,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = ">=3.7,<4.0" -content-hash = "66add20dcd1d0e1eab5eb8fd65df4b0ca9f6d86e88152519e0d9e348004fdad9" +content-hash = "1da63cf4600a29761f426d20c31d0f24e1f794447fcba988affaa36bf039419b" [metadata.files] alabaster = [ @@ -773,6 +897,10 @@ filelock = [ {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, ] +ghp-import = [ + {file = "ghp-import-2.0.2.tar.gz", hash = "sha256:947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071"}, + {file = "ghp_import-2.0.2-py3-none-any.whl", hash = "sha256:5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46"}, +] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -801,6 +929,10 @@ jinja2-time = [ {file = "jinja2-time-0.2.0.tar.gz", hash = "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40"}, {file = "jinja2_time-0.2.0-py2.py3-none-any.whl", hash = "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa"}, ] +markdown = [ + {file = "Markdown-3.3.6-py3-none-any.whl", hash = "sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3"}, + {file = "Markdown-3.3.6.tar.gz", hash = "sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006"}, +] markupsafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, @@ -843,6 +975,22 @@ markupsafe = [ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] +mergedeep = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] +mkdocs = [ + {file = "mkdocs-1.3.0-py3-none-any.whl", hash = "sha256:26bd2b03d739ac57a3e6eed0b7bcc86168703b719c27b99ad6ca91dc439aacde"}, + {file = "mkdocs-1.3.0.tar.gz", hash = "sha256:b504405b04da38795fec9b2e5e28f6aa3a73bb0960cb6d5d27ead28952bd35ea"}, +] +mkdocs-material = [ + {file = "mkdocs-material-8.2.9.tar.gz", hash = "sha256:c177ff180b024bc061714c9483a8d26d36e1b9fdef4be8e70e243770416fe9d7"}, + {file = "mkdocs_material-8.2.9-py2.py3-none-any.whl", hash = "sha256:fbe39baa57c70fdbe9d1a24c6c2d0625e255e74f22b20aff43abb64157446f4d"}, +] +mkdocs-material-extensions = [ + {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"}, + {file = "mkdocs_material_extensions-1.0.3-py3-none-any.whl", hash = "sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44"}, +] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, @@ -875,6 +1023,10 @@ pygments = [ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, ] +pymdown-extensions = [ + {file = "pymdown-extensions-9.3.tar.gz", hash = "sha256:a80553b243d3ed2d6c27723bcd64ca9887e560e6f4808baa96f36e93061eaf90"}, + {file = "pymdown_extensions-9.3-py3-none-any.whl", hash = "sha256:b37461a181c1c8103cfe1660081726a0361a8294cbfda88e5b02cefe976f0546"}, +] pyparsing = [ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, @@ -899,6 +1051,45 @@ pytz = [ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, ] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +pyyaml-env-tag = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] requests = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, @@ -997,6 +1188,32 @@ virtualenv = [ {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, ] +watchdog = [ + {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383"}, + {file = "watchdog-2.1.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d1cf7dfd747dec519486a98ef16097e6c480934ef115b16f18adb341df747a4"}, + {file = "watchdog-2.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7f14ce6adea2af1bba495acdde0e510aecaeb13b33f7bd2f6324e551b26688ca"}, + {file = "watchdog-2.1.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4d0e98ac2e8dd803a56f4e10438b33a2d40390a72750cff4939b4b274e7906fa"}, + {file = "watchdog-2.1.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:81982c7884aac75017a6ecc72f1a4fedbae04181a8665a34afce9539fc1b3fab"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0b4a1fe6201c6e5a1926f5767b8664b45f0fcb429b62564a41f490ff1ce1dc7a"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6e6ae29b72977f2e1ee3d0b760d7ee47896cb53e831cbeede3e64485e5633cc8"}, + {file = "watchdog-2.1.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b9777664848160449e5b4260e0b7bc1ae0f6f4992a8b285db4ec1ef119ffa0e2"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:19b36d436578eb437e029c6b838e732ed08054956366f6dd11875434a62d2b99"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b61acffaf5cd5d664af555c0850f9747cc5f2baf71e54bbac164c58398d6ca7b"}, + {file = "watchdog-2.1.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e877c70245424b06c41ac258023ea4bd0c8e4ff15d7c1368f17cd0ae6e351dd"}, + {file = "watchdog-2.1.7-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d802d65262a560278cf1a65ef7cae4e2bc7ecfe19e5451349e4c67e23c9dc420"}, + {file = "watchdog-2.1.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b3750ee5399e6e9c69eae8b125092b871ee9e2fcbd657a92747aea28f9056a5c"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_aarch64.whl", hash = "sha256:ed6d9aad09a2a948572224663ab00f8975fae242aa540509737bb4507133fa2d"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_armv7l.whl", hash = "sha256:b26e13e8008dcaea6a909e91d39b629a39635d1a8a7239dd35327c74f4388601"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_i686.whl", hash = "sha256:0908bb50f6f7de54d5d31ec3da1654cb7287c6b87bce371954561e6de379d690"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64.whl", hash = "sha256:bdcbf75580bf4b960fb659bbccd00123d83119619195f42d721e002c1621602f"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:81a5861d0158a7e55fe149335fb2bbfa6f48cbcbd149b52dbe2cd9a544034bbd"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_s390x.whl", hash = "sha256:03b43d583df0f18782a0431b6e9e9965c5b3f7cf8ec36a00b930def67942c385"}, + {file = "watchdog-2.1.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ae934e34c11aa8296c18f70bf66ed60e9870fcdb4cc19129a04ca83ab23e7055"}, + {file = "watchdog-2.1.7-py3-none-win32.whl", hash = "sha256:49639865e3db4be032a96695c98ac09eed39bbb43fe876bb217da8f8101689a6"}, + {file = "watchdog-2.1.7-py3-none-win_amd64.whl", hash = "sha256:340b875aecf4b0e6672076a6f05cfce6686935559bb6d34cebedee04126a9566"}, + {file = "watchdog-2.1.7-py3-none-win_ia64.whl", hash = "sha256:351e09b6d9374d5bcb947e6ac47a608ec25b9d70583e9db00b2fcdb97b00b572"}, + {file = "watchdog-2.1.7.tar.gz", hash = "sha256:3fd47815353be9c44eebc94cc28fe26b2b0c5bd889dafc4a5a7cbdf924143480"}, +] zipp = [ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, diff --git a/pyproject.toml b/pyproject.toml index cdc6d9b..53084c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,8 @@ include = [ [tool.poetry.dependencies] python = ">=3.7,<4.0" cookiecutter = "^1.7.3" +mkdocs = "^1.3.0" +mkdocs-material = "^8.2.9" [tool.poetry.dev-dependencies] pytest = "^7.1.1"