From bd4e56b04c2a791fe69fd9975be6ecbfdcc061bb Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 8 Nov 2024 10:23:58 +0100 Subject: [PATCH 01/10] Drop python 3.8 support (#265) --- .github/actions/python-environment/action.yml | 2 +- .github/workflows/checks.yml | 8 +- doc/changes/unreleased.md | 4 + .../actions/python-environment/action.yml | 2 +- .../templates/github/workflows/checks.yml | 8 +- poetry.lock | 622 +++++++++--------- pyproject.toml | 2 +- 7 files changed, 318 insertions(+), 330 deletions(-) diff --git a/.github/actions/python-environment/action.yml b/.github/actions/python-environment/action.yml index 07f609c75..0c17ff7e6 100644 --- a/.github/actions/python-environment/action.yml +++ b/.github/actions/python-environment/action.yml @@ -6,7 +6,7 @@ inputs: python-version: description: 'Python version to use' required: true - default: "3.8" + default: "3.10" poetry-version: description: 'Poetry version to use' diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 56c3d7ffe..fa2dffce6 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -47,7 +47,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.9", "3.10", "3.11" ] steps: - name: SCM Checkout @@ -75,7 +75,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.9", "3.10", "3.11" ] steps: - name: SCM Checkout @@ -96,7 +96,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.9", "3.10", "3.11" ] steps: - name: SCM Checkout @@ -126,7 +126,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.9", "3.10", "3.11" ] exasol-version: [ "7.1.9" ] steps: diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 7c623ed2b..1521bec4d 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -1,5 +1,9 @@ # Unreleased +## 🚨 Breaking Changes + +* Dropped python 3.8 support + ## 🐞 Fixed * Fixed CD workflow template diff --git a/exasol/toolbox/templates/github/actions/python-environment/action.yml b/exasol/toolbox/templates/github/actions/python-environment/action.yml index 953071760..03df1fb74 100644 --- a/exasol/toolbox/templates/github/actions/python-environment/action.yml +++ b/exasol/toolbox/templates/github/actions/python-environment/action.yml @@ -6,7 +6,7 @@ inputs: python-version: description: 'Python version to use' required: true - default: 3.8 + default: 3.10 poetry-version: description: 'Poetry version to use' diff --git a/exasol/toolbox/templates/github/workflows/checks.yml b/exasol/toolbox/templates/github/workflows/checks.yml index 8daeb984e..06d557bae 100644 --- a/exasol/toolbox/templates/github/workflows/checks.yml +++ b/exasol/toolbox/templates/github/workflows/checks.yml @@ -53,7 +53,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - name: SCM Checkout @@ -81,7 +81,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - name: SCM Checkout @@ -102,7 +102,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11" ] + python-version: [ "3.9", "3.10", "3.11" ] steps: - name: SCM Checkout @@ -132,7 +132,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] exasol-version: ["7.1.9"] steps: diff --git a/poetry.lock b/poetry.lock index 7c78f94e7..2d40edb0f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" +version = "0.7.16" +description = "A light, configurable Sphinx theme" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] @@ -22,9 +22,6 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - [[package]] name = "argcomplete" version = "3.5.1" @@ -41,13 +38,13 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "astroid" -version = "3.2.4" +version = "3.3.5" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, - {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, + {file = "astroid-3.3.5-py3-none-any.whl", hash = "sha256:a9d1c946ada25098d790e079ba2a1b112157278f3fb7e718ae6a9252f5835dc8"}, + {file = "astroid-3.3.5.tar.gz", hash = "sha256:5cfc40ae9f68311075d27ef68a4841bdc5cc7f6cf86671b49f00607d30188e2d"}, ] [package.dependencies] @@ -98,9 +95,6 @@ files = [ {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, ] -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -152,33 +146,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.8.0" +version = "24.10.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.8" -files = [ - {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, - {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, - {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, - {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, - {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, - {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, - {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, - {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, - {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, - {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, - {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, - {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, - {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, - {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, - {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, - {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, - {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, - {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, - {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, - {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, - {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, - {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, +python-versions = ">=3.9" +files = [ + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, ] [package.dependencies] @@ -192,7 +186,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -359,13 +353,13 @@ files = [ [[package]] name = "colorlog" -version = "6.8.2" +version = "6.9.0" description = "Add colours to the output of Python's logging module." optional = false python-versions = ">=3.6" files = [ - {file = "colorlog-6.8.2-py3-none-any.whl", hash = "sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33"}, - {file = "colorlog-6.8.2.tar.gz", hash = "sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44"}, + {file = "colorlog-6.9.0-py3-none-any.whl", hash = "sha256:5906e71acd67cb07a71e779c47c4bcb45fb8c2993eebe9e5adcd6a6f1b283eff"}, + {file = "colorlog-6.9.0.tar.gz", hash = "sha256:bfba54a1b93b94f54e1f4fe48395725a3d92fd2a4af702f6bd70946bdc0c6ac2"}, ] [package.dependencies] @@ -376,83 +370,73 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] [[package]] name = "coverage" -version = "7.6.1" +version = "7.6.4" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, +python-versions = ">=3.9" +files = [ + {file = "coverage-7.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07"}, + {file = "coverage-7.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a"}, + {file = "coverage-7.6.4-cp310-cp310-win32.whl", hash = "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa"}, + {file = "coverage-7.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522"}, + {file = "coverage-7.6.4-cp311-cp311-win32.whl", hash = "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf"}, + {file = "coverage-7.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5"}, + {file = "coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17"}, + {file = "coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a"}, + {file = "coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e"}, + {file = "coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef"}, + {file = "coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e"}, + {file = "coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901"}, + {file = "coverage-7.6.4-cp39-cp39-win32.whl", hash = "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09"}, + {file = "coverage-7.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f"}, + {file = "coverage-7.6.4-pp39.pp310-none-any.whl", hash = "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e"}, + {file = "coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73"}, ] [package.extras] @@ -486,13 +470,13 @@ files = [ [[package]] name = "docutils" -version = "0.20.1" +version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, - {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] [[package]] @@ -710,71 +694,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -820,43 +805,43 @@ files = [ [[package]] name = "mypy" -version = "1.12.1" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, - {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, - {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, - {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, - {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, - {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, - {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, - {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, - {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, - {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, - {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, - {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, - {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, - {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, - {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, - {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, - {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, - {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, - {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, - {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, - {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, - {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -866,6 +851,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -1006,13 +992,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.5.0" +version = "3.8.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, - {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, ] [package.dependencies] @@ -1191,17 +1177,17 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" -version = "3.2.7" +version = "3.3.1" description = "python code static checker" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, - {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, + {file = "pylint-3.3.1-py3-none-any.whl", hash = "sha256:2f846a466dd023513240bc140ad2dd73bfc080a5d85a710afdb728c420a5a2b9"}, + {file = "pylint-3.3.1.tar.gz", hash = "sha256:9f3dcc87b1203e612b78d91a896407787e708b3f189b5fa0b307712d49ff0c6e"}, ] [package.dependencies] -astroid = ">=3.2.4,<=3.3.0-dev0" +astroid = ">=3.3.4,<=3.4.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -1270,30 +1256,19 @@ files = [ prysk = ">=0.15.0" pytest = ">=7.3.2,<8.0.0" -[[package]] -name = "pytz" -version = "2024.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, - {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, -] - [[package]] name = "pyupgrade" -version = "3.8.0" +version = "3.19.0" description = "A tool to automatically upgrade syntax for newer versions." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyupgrade-3.8.0-py2.py3-none-any.whl", hash = "sha256:08d0e6129f5e9da7e7a581bdbea689e0d49c3c93eeaf156a07ae2fd794f52660"}, - {file = "pyupgrade-3.8.0.tar.gz", hash = "sha256:1facb0b8407cca468dfcc1d13717e3a85aa37b9e6e7338664ad5bfe5ef50c867"}, + {file = "pyupgrade-3.19.0-py2.py3-none-any.whl", hash = "sha256:1364fcae4436a6a236a85960587390ec8a939ad0f65f429346f70a5f201c1489"}, + {file = "pyupgrade-3.19.0.tar.gz", hash = "sha256:7ed4b7d972ed2788c43994f4a24f949d5bf044342992f3b48e1bed0092ddaa01"}, ] [package.dependencies] -tokenize-rt = ">=3.2.0" +tokenize-rt = ">=6.1.0" [[package]] name = "pyyaml" @@ -1380,13 +1355,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.9.2" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -1399,12 +1374,13 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "sh" -version = "1.14.3" +version = "2.1.0" description = "Python subprocess replacement" optional = false -python-versions = "*" +python-versions = "<4.0,>=3.8.1" files = [ - {file = "sh-1.14.3.tar.gz", hash = "sha256:e4045b6c732d9ce75d571c79f5ac2234edd9ae4f5fa9d59b09705082bdca18c7"}, + {file = "sh-2.1.0-py3-none-any.whl", hash = "sha256:bf5e44178dd96a542126c2774e9b7ab1d89bfe0e2ef84d92e6d0ed7358d63d01"}, + {file = "sh-2.1.0.tar.gz", hash = "sha256:7e27301c574bec8ca5bf6f211851357526455ee97cd27a7c4c6cc5e2375399cb"}, ] [[package]] @@ -1456,38 +1432,39 @@ files = [ [[package]] name = "sphinx" -version = "7.1.2" +version = "7.4.7" description = "Python documentation generator" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, - {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, + {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, + {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +alabaster = ">=0.7.14,<0.8.0" +babel = ">=2.13" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +docutils = ">=0.20,<0.22" imagesize = ">=1.3" -importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.13" -requests = ">=2.25.0" -snowballstemmer = ">=2.0" +importlib-metadata = {version = ">=6.0", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.1" +packaging = ">=23.0" +Pygments = ">=2.17" +requests = ">=2.30.0" +snowballstemmer = ">=2.2" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" +sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] +lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] [[package]] name = "sphinx-basic-ng" @@ -1526,26 +1503,28 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] [[package]] name = "sphinx-design" -version = "0.5.0" +version = "0.6.1" description = "A sphinx extension for designing beautiful, view size responsive web components." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinx_design-0.5.0-py3-none-any.whl", hash = "sha256:1af1267b4cea2eedd6724614f19dcc88fe2e15aff65d06b2f6252cee9c4f4c1e"}, - {file = "sphinx_design-0.5.0.tar.gz", hash = "sha256:e8e513acea6f92d15c6de3b34e954458f245b8e761b45b63950f65373352ab00"}, + {file = "sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c"}, + {file = "sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632"}, ] [package.dependencies] -sphinx = ">=5,<8" +sphinx = ">=6,<9" [package.extras] code-style = ["pre-commit (>=3,<4)"] -rtd = ["myst-parser (>=1,<3)"] -testing = ["myst-parser (>=1,<3)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] -theme-furo = ["furo (>=2023.7.0,<2023.8.0)"] -theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] -theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] -theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] +rtd = ["myst-parser (>=2,<4)"] +testing = ["defusedxml", "myst-parser (>=2,<4)", "pytest (>=8.3,<9.0)", "pytest-cov", "pytest-regressions"] +testing-no-myst = ["defusedxml", "pytest (>=8.3,<9.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2024.7.18,<2024.8.0)"] +theme-im = ["sphinx-immaterial (>=0.12.2,<0.13.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.15.2,<0.16.0)"] +theme-rtd = ["sphinx-rtd-theme (>=2.0,<3.0)"] +theme-sbt = ["sphinx-book-theme (>=1.1,<2.0)"] [[package]] name = "sphinx-inline-tabs" @@ -1567,47 +1546,50 @@ test = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "2.0.0" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] @@ -1626,32 +1608,34 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "2.0.0" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["defusedxml (>=0.7.1)", "pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "2.0.0" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, ] [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -1670,13 +1654,13 @@ pbr = ">=2.0.0" [[package]] name = "tokenize-rt" -version = "6.0.0" +version = "6.1.0" description = "A wrapper around the stdlib `tokenize` which roundtrips." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tokenize_rt-6.0.0-py2.py3-none-any.whl", hash = "sha256:d4ff7ded2873512938b4f8cbb98c9b07118f01d30ac585a30d7a88353ca36d22"}, - {file = "tokenize_rt-6.0.0.tar.gz", hash = "sha256:b9711bdfc51210211137499b5e355d3de5ec88a85d2025c520cbb921b5194367"}, + {file = "tokenize_rt-6.1.0-py2.py3-none-any.whl", hash = "sha256:d706141cdec4aa5f358945abe36b911b8cbdc844545da99e811250c0cee9b6fc"}, + {file = "tokenize_rt-6.1.0.tar.gz", hash = "sha256:e8ee836616c0877ab7c7b54776d2fefcc3bde714449a206762425ae114b53c86"}, ] [[package]] @@ -1714,13 +1698,13 @@ files = [ [[package]] name = "typer" -version = "0.12.5" +version = "0.13.0" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, - {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, + {file = "typer-0.13.0-py3-none-any.whl", hash = "sha256:d85fe0b777b2517cc99c8055ed735452f2659cd45e451507c76f48ce5c1d00e2"}, + {file = "typer-0.13.0.tar.gz", hash = "sha256:f1c7198347939361eec90139ffa0fd8b3df3a2259d5852a0f7400e476d95985c"}, ] [package.dependencies] @@ -1759,13 +1743,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.0" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.0-py3-none-any.whl", hash = "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655"}, - {file = "virtualenv-20.27.0.tar.gz", hash = "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -1809,5 +1793,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "65e5106028ae791bfde144958f5899da84b0a642308fe4c5a92f538c31e00a5a" +python-versions = "^3.9" +content-hash = "d28e72a84f07b8933bece14e89c3dfc7988aacd872d8199b951747f267cac1b1" diff --git a/pyproject.toml b/pyproject.toml index 2930a38ce..c606fd691 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ pre-commit = ">=3.1.1,<4" prysk = {extras = ["pytest-plugin"], version = ">0.17.0,<1"} pylint = ">=2.15.4" pytest = ">=7.2.2,<9" -python = "^3.8" +python = "^3.9" pyupgrade = ">=2.38.2,<4.0.0" shibuya = ">=2024.5.14" sphinx = ">=5.3,<8" From 26e55a1d9f2866b3167058d9c95e69e6e1174a84 Mon Sep 17 00:00:00 2001 From: Jannis-Mittenzwei <145327095+Jannis-Mittenzwei@users.noreply.github.com> Date: Fri, 8 Nov 2024 16:00:37 +0100 Subject: [PATCH 02/10] Update changelog #74 (#247) --- doc/changes/changes_0.15.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/changes/changes_0.15.0.md b/doc/changes/changes_0.15.0.md index 2cdac8b03..7188f56b9 100644 --- a/doc/changes/changes_0.15.0.md +++ b/doc/changes/changes_0.15.0.md @@ -4,6 +4,7 @@ * Added cookiecutter-template for creating new project * [#246](https://github.com/exasol/python-toolbox/issues/246): Added standard branch protection workflow +* #74: Added security linter nox task ## 🐞 Bug Fixes From f7912425554b1bf1d6617564d4c9a72bbfe73063 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 8 Nov 2024 17:28:44 +0100 Subject: [PATCH 03/10] Add support for multi version documentation (#264) --- .github/workflows/gh-pages.yml | 2 +- doc/_templates/version.html | 12 ----- doc/changes/unreleased.md | 8 +++- doc/conf.py | 1 + .../modules/sphinx/multiversion/conf.py | 1 + exasol/toolbox/metrics.py | 9 +++- exasol/toolbox/nox/_lint.py | 17 +++---- exasol/toolbox/nox/_shared.py | 2 +- exasol/toolbox/nox/_test.py | 2 +- .../toolbox/sphinx/multiversion/__init__.py | 14 +++--- exasol/toolbox/sphinx/multiversion/main.py | 2 +- exasol/toolbox/sphinx/multiversion/sphinx.py | 46 +++++++++++++++++-- .../templates/github/workflows/gh-pages.yml | 2 +- exasol/toolbox/tools/security.py | 1 + noxconfig.py | 12 ++++- noxfile.py | 2 + poetry.lock | 8 ++-- pyproject.toml | 14 +++--- 18 files changed, 101 insertions(+), 54 deletions(-) delete mode 100644 doc/_templates/version.html diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 01d55ba99..bb3cc102d 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -16,7 +16,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run sphinx-multiversion docs/ .html-documentation - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.6.3 diff --git a/doc/_templates/version.html b/doc/_templates/version.html deleted file mode 100644 index 7c3e4f606..000000000 --- a/doc/_templates/version.html +++ /dev/null @@ -1,12 +0,0 @@ -{% if versions %} -

{{ _('Versions') }}

- -{% endif %} \ No newline at end of file diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 1521bec4d..c50ec18a1 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -4,15 +4,19 @@ * Dropped python 3.8 support +## ✨ Added + +* Added support for multi version Documentation + ## 🐞 Fixed * Fixed CD workflow template ## 📚 Documentation -* Add Documentation on Metrics +* Added Documentation on Metrics ## 🔩 Internal -* Relock dependencies +* Relocked dependencies diff --git a/doc/conf.py b/doc/conf.py index e4e855715..9289b6f34 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -38,6 +38,7 @@ "sphinx_design", "sphinx_inline_tabs", "sphinx_copybutton", + "exasol.toolbox.sphinx.multiversion", ] intersphinx_mapping = {"python": ("https://docs.python.org/3", None)} diff --git a/doc/user_guide/modules/sphinx/multiversion/conf.py b/doc/user_guide/modules/sphinx/multiversion/conf.py index 27de3e13a..6078650a3 100644 --- a/doc/user_guide/modules/sphinx/multiversion/conf.py +++ b/doc/user_guide/modules/sphinx/multiversion/conf.py @@ -1,4 +1,5 @@ """Sphinx configuration file.""" + import time author = "Jan Holthuis" diff --git a/exasol/toolbox/metrics.py b/exasol/toolbox/metrics.py index cea643a46..371d9d37a 100644 --- a/exasol/toolbox/metrics.py +++ b/exasol/toolbox/metrics.py @@ -157,7 +157,14 @@ def char(value: str, default: str = "H") -> str: return value[0] return default - weight = {"LL": 1/18, "LM": 1/15, "LH": 1/12, "ML": 1/9, "MM": 1/6, "MH": 1/3} + weight = { + "LL": 1 / 18, + "LM": 1 / 15, + "LH": 1 / 12, + "ML": 1 / 9, + "MM": 1 / 6, + "MH": 1 / 3, + } exp = 0.0 for infos in ratings: severity = infos["issue_severity"] diff --git a/exasol/toolbox/nox/_lint.py b/exasol/toolbox/nox/_lint.py index bc474e7d6..b7382aae2 100644 --- a/exasol/toolbox/nox/_lint.py +++ b/exasol/toolbox/nox/_lint.py @@ -11,14 +11,15 @@ def _pylint(session: Session, files: Iterable[str]) -> None: session.run( - "poetry", - "run", - "python", - "-m", - "pylint", - "--output-format", - "colorized,json:.lint.json,text:.lint.txt", - *files) + "poetry", + "run", + "python", + "-m", + "pylint", + "--output-format", + "colorized,json:.lint.json,text:.lint.txt", + *files, + ) def _type_check(session: Session, files: Iterable[str]) -> None: diff --git a/exasol/toolbox/nox/_shared.py b/exasol/toolbox/nox/_shared.py index 5de213670..8e83e1523 100644 --- a/exasol/toolbox/nox/_shared.py +++ b/exasol/toolbox/nox/_shared.py @@ -65,7 +65,7 @@ def _context(session: Session, **kwargs: Any) -> MutableMapping[str, Any]: parser = _context_parser() namespace, args = parser.parse_known_args(session.posargs) cli_context: MutableMapping[str, Any] = vars(namespace) - cli_context['fwd-args'] = args + cli_context["fwd-args"] = args default_context = {"db_version": "7.1.9", "coverage": False} # Note: ChainMap scans last to first return ChainMap(kwargs, cli_context, default_context) diff --git a/exasol/toolbox/nox/_test.py b/exasol/toolbox/nox/_test.py index 8bd426a77..309638af4 100644 --- a/exasol/toolbox/nox/_test.py +++ b/exasol/toolbox/nox/_test.py @@ -28,7 +28,7 @@ def _test_command( else [] ) pytest_command = ["pytest", "-v", f"{path}"] - return base_command + coverage_command + pytest_command + context['fwd-args'] + return base_command + coverage_command + pytest_command + context["fwd-args"] def _unit_tests( diff --git a/exasol/toolbox/sphinx/multiversion/__init__.py b/exasol/toolbox/sphinx/multiversion/__init__.py index 85b5c81f9..683b6c769 100644 --- a/exasol/toolbox/sphinx/multiversion/__init__.py +++ b/exasol/toolbox/sphinx/multiversion/__init__.py @@ -10,18 +10,16 @@ So huge thanks to the original author `Jan Holthuis `_ and all contributors. -TODO's: -* add standard default templates -* add support for index page -* add sorting support -* add gh pages support -* add command to deploy to gh-pages -* add support for loading packed version template? + +NOTE: +The original version and its defaults were minimally adjusted to work in Exasol's projects with the defaults and without adding an extra template. The [Shibuya](https://github.com/lepture/shibuya) theme is expected to be used for HTML, which already evaluates the versions field in the HTML context and generates an appropriate selector for the versions. """ from exasol.toolbox.sphinx.multiversion.main import main +from exasol.toolbox.sphinx.multiversion.sphinx import setup +from exasol.toolbox.version import VERSION -__version__ = "0.1.0" +__version__ = VERSION __all__ = [ "setup", diff --git a/exasol/toolbox/sphinx/multiversion/main.py b/exasol/toolbox/sphinx/multiversion/main.py index dcd65cc44..0ccb58acf 100644 --- a/exasol/toolbox/sphinx/multiversion/main.py +++ b/exasol/toolbox/sphinx/multiversion/main.py @@ -566,7 +566,7 @@ def _main(args, argv): export_to_destination(matches, export_dst) with resources.path( - "exasol.sphinx_extensions.multiversion.templates", "multiversion-index.html" + "exasol.toolbox.sphinx.multiversion.templates", "multiversion-index.html" ) as p: with open(p, encoding="utf-8") as f: template = Template(f.read()) diff --git a/exasol/toolbox/sphinx/multiversion/sphinx.py b/exasol/toolbox/sphinx/multiversion/sphinx.py index c8fe2b195..88c4c60be 100644 --- a/exasol/toolbox/sphinx/multiversion/sphinx.py +++ b/exasol/toolbox/sphinx/multiversion/sphinx.py @@ -9,11 +9,13 @@ from sphinx.locale import _ from sphinx.util import i18n as sphinx_i18n +from exasol.toolbox.version import VERSION + logger = logging.getLogger(__name__) DATE_FMT = "%Y-%m-%d %H:%M:%S %z" -DEFAULT_TAG_WHITELIST = r"^.*$" -DEFAULT_BRANCH_WHITELIST = r"^.*$" +DEFAULT_TAG_WHITELIST = r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$" +DEFAULT_BRANCH_WHITELIST = r"(master|main)" DEFAULT_REMOTE_WHITELIST = None DEFAULT_RELEASED_PATTERN = r"^tags/.*$" DEFAULT_OUTPUTDIR_FORMAT = r"{ref.name}" @@ -40,6 +42,37 @@ ) +class TagFormatError(Exception): + """ + Exception raised for errors in the tag format. + + The exception is raised when a tag is found to be incorrectly formatted. + """ + + +class ExasolVersionTag: + + def __init__(self, version): + try: + v = version.name.strip() + parts = v.split(".") + major, minor, patch = map(int, parts) + except Exception as ex: + msg = f"Invalid tag format: '{version}', details: {ex}" + raise TagFormatError(msg) from ex + + self._version = version + self._version_tripple = (major, minor, patch) + + @property + def version(self): + return self._version + + @property + def version_triple(self): + return self._version_tripple + + class VersionInfo: def __init__(self, app, context, metadata, current_version_name): self.app = app @@ -94,8 +127,10 @@ def in_development(self): ] def __iter__(self): - yield from self.tags yield from self.branches + yield from sorted( + self.tags, key=lambda t: ExasolVersionTag(t).version_triple, reverse=True + ) def __getitem__(self, name): v = self.metadata.get(name) @@ -183,7 +218,8 @@ def html_page_context(app, pagename, templatename, context, doctree): context["vhasdoc"] = versioninfo.vhasdoc context["vpathto"] = versioninfo.vpathto - context["current_version"] = versioninfo[app.config.smv_current_version] + current = versioninfo[app.config.smv_current_version] + context["current_version"] = current.name context["latest_version"] = versioninfo[app.config.smv_latest_version] context["html_theme"] = app.config.html_theme @@ -247,7 +283,7 @@ def setup(app): app.connect("config-inited", config_inited) return { - "version": "0.2", + "version": VERSION, "parallel_read_safe": True, "parallel_write_safe": True, } diff --git a/exasol/toolbox/templates/github/workflows/gh-pages.yml b/exasol/toolbox/templates/github/workflows/gh-pages.yml index e49184a03..0767bae53 100644 --- a/exasol/toolbox/templates/github/workflows/gh-pages.yml +++ b/exasol/toolbox/templates/github/workflows/gh-pages.yml @@ -16,7 +16,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run sphinx-multiversion docs/ .html-documentation - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.6.0 diff --git a/exasol/toolbox/tools/security.py b/exasol/toolbox/tools/security.py index 9a75977a5..4af3cac27 100644 --- a/exasol/toolbox/tools/security.py +++ b/exasol/toolbox/tools/security.py @@ -1,4 +1,5 @@ """This module contains security related CLI tools and code""" + import json import re import subprocess diff --git a/noxconfig.py b/noxconfig.py index f3f3dc49d..0e94bf0e2 100644 --- a/noxconfig.py +++ b/noxconfig.py @@ -1,4 +1,5 @@ """Configuration for nox based task runner""" + from __future__ import annotations from dataclasses import dataclass @@ -35,8 +36,15 @@ class Config: root: Path = Path(__file__).parent doc: Path = Path(__file__).parent / "doc" version_file: Path = Path(__file__).parent / "exasol" / "toolbox" / "version.py" - path_filters: Iterable[str] = ("dist", ".eggs", "venv", "metrics-schema", "project-template", "idioms") + path_filters: Iterable[str] = ( + "dist", + ".eggs", + "venv", + "metrics-schema", + "project-template", + "idioms", + ) plugins = [UpdateTemplates] - + PROJECT_CONFIG = Config() diff --git a/noxfile.py b/noxfile.py index 60b03a862..fb579dbe4 100644 --- a/noxfile.py +++ b/noxfile.py @@ -1,4 +1,5 @@ """defines nox tasks/targets for this project""" + import nox # imports all nox task provided by the toolbox @@ -7,6 +8,7 @@ # default actions to be run if nothing is explicitly specified with the -s option nox.options.sessions = ["fix"] + # entry point for debugging def main() -> None: """ diff --git a/poetry.lock b/poetry.lock index 2d40edb0f..dd6a969cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -928,13 +928,13 @@ uv = ["uv (>=0.1.6)"] [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -1794,4 +1794,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d28e72a84f07b8933bece14e89c3dfc7988aacd872d8199b951747f267cac1b1" +content-hash = "c36b26bba43eec74c211889dd6b7e86371d89cea60268094105b3d11a093d4d7" diff --git a/pyproject.toml b/pyproject.toml index c606fd691..c738d8863 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,9 +55,9 @@ sphinx-copybutton = "^0.5.0" sphinx-inline-tabs = "^2023.4.21" sphinx-design = ">=0.5.0,<1" typer = {extras = ["all"], version = ">=0.7.0"} - - bandit = {extras = ["toml"], version = "^1.7.9"} +jinja2 = "^3.1.4" + [tool.poetry.group.dev.dependencies] autoimport = "^1.4.0" @@ -65,11 +65,6 @@ autoimport = "^1.4.0" requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" - -[tool.poetry.plugins."console_scripts"] -"sphinx-multiversion" = "exasol.toolbox.sphinx.multiversion.main:main" -"version-check" = "exasol.toolbox.pre_commit_hooks.package_version:main" - # Tooling [tool.coverage.run] relative_files = true @@ -108,5 +103,10 @@ module = [ ] ignore_errors = true +[tool.poetry.plugins."console_scripts"] +"version-check" = "exasol.toolbox.pre_commit_hooks.package_version:main" + + [tool.poetry.scripts] tbx = 'exasol.toolbox.tools.tbx:CLI' +sphinx-multiversion = 'exasol.toolbox.sphinx.multiversion:main' From a22192c4407b1487d6e60c7836b0fc577e32fd83 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 8 Nov 2024 17:37:48 +0100 Subject: [PATCH 04/10] Make sure all tags and branches are available during docs build (#267) --- .github/workflows/gh-pages.yml | 2 ++ exasol/toolbox/templates/github/workflows/gh-pages.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index bb3cc102d..67182a3ca 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -10,6 +10,8 @@ jobs: steps: - name: SCM Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Python & Poetry Environment uses: ./.github/actions/python-environment diff --git a/exasol/toolbox/templates/github/workflows/gh-pages.yml b/exasol/toolbox/templates/github/workflows/gh-pages.yml index 0767bae53..13d015e94 100644 --- a/exasol/toolbox/templates/github/workflows/gh-pages.yml +++ b/exasol/toolbox/templates/github/workflows/gh-pages.yml @@ -10,6 +10,8 @@ jobs: steps: - name: SCM Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Python & Poetry Environment uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 From 7a4d9cc19372a82ac36a9242bfe01db91a06bf15 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 8 Nov 2024 17:45:29 +0100 Subject: [PATCH 05/10] Fix path to documentation in docs build command (#268) --- .github/workflows/gh-pages.yml | 2 +- exasol/toolbox/templates/github/workflows/gh-pages.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 67182a3ca..e4fc84de4 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -18,7 +18,7 @@ jobs: - name: Build Documentation run: | - poetry run sphinx-multiversion docs/ .html-documentation + poetry run sphinx-multiversion doc/ .html-documentation - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.6.3 diff --git a/exasol/toolbox/templates/github/workflows/gh-pages.yml b/exasol/toolbox/templates/github/workflows/gh-pages.yml index 13d015e94..ec74a7d4d 100644 --- a/exasol/toolbox/templates/github/workflows/gh-pages.yml +++ b/exasol/toolbox/templates/github/workflows/gh-pages.yml @@ -18,7 +18,7 @@ jobs: - name: Build Documentation run: | - poetry run sphinx-multiversion docs/ .html-documentation + poetry run sphinx-multiversion doc/ .html-documentation - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.6.0 From c841c24104c4d4e0cc4f7f1240b3c7f00ae480c5 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Mon, 11 Nov 2024 15:38:24 +0100 Subject: [PATCH 06/10] Fix selection of latest version (#271) --- doc/changes/unreleased.md | 1 + exasol/toolbox/sphinx/multiversion/main.py | 10 ++++- exasol/toolbox/sphinx/multiversion/sphinx.py | 42 +++----------------- 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index c50ec18a1..23285d5c9 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -11,6 +11,7 @@ ## 🐞 Fixed * Fixed CD workflow template +* Fixed the selection of the latest version in Multi-Version Documentation ## 📚 Documentation diff --git a/exasol/toolbox/sphinx/multiversion/main.py b/exasol/toolbox/sphinx/multiversion/main.py index 0ccb58acf..4d94c68ca 100644 --- a/exasol/toolbox/sphinx/multiversion/main.py +++ b/exasol/toolbox/sphinx/multiversion/main.py @@ -21,6 +21,7 @@ from sphinx import config as sphinx_config from sphinx import project as sphinx_project +from exasol.toolbox.release import Version as ExasolVersion from exasol.toolbox.sphinx.multiversion import ( git, sphinx, @@ -573,7 +574,12 @@ def _main(args, argv): with open( os.path.join(args.outputdir, "index.html"), "w", encoding="utf-8" ) as f: - ref = gitrefs[-1] - f.write(template.render(version=ref.name)) + versions = [ + ref.name for ref in gitrefs if re.match(config.smv_tag_whitelist, ref.name) + ] + versions = sorted( + versions, key=lambda v: ExasolVersion.from_string(v), reverse=True + ) + f.write(template.render(version=versions[0])) return 0 diff --git a/exasol/toolbox/sphinx/multiversion/sphinx.py b/exasol/toolbox/sphinx/multiversion/sphinx.py index 88c4c60be..439e2833f 100644 --- a/exasol/toolbox/sphinx/multiversion/sphinx.py +++ b/exasol/toolbox/sphinx/multiversion/sphinx.py @@ -9,13 +9,14 @@ from sphinx.locale import _ from sphinx.util import i18n as sphinx_i18n -from exasol.toolbox.version import VERSION +from exasol.toolbox.release import Version as ExasolVersion +from exasol.toolbox.version import VERSION as PLUGIN_VERSION logger = logging.getLogger(__name__) DATE_FMT = "%Y-%m-%d %H:%M:%S %z" DEFAULT_TAG_WHITELIST = r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$" -DEFAULT_BRANCH_WHITELIST = r"(master|main)" +DEFAULT_BRANCH_WHITELIST = r"master|main" DEFAULT_REMOTE_WHITELIST = None DEFAULT_RELEASED_PATTERN = r"^tags/.*$" DEFAULT_OUTPUTDIR_FORMAT = r"{ref.name}" @@ -42,37 +43,6 @@ ) -class TagFormatError(Exception): - """ - Exception raised for errors in the tag format. - - The exception is raised when a tag is found to be incorrectly formatted. - """ - - -class ExasolVersionTag: - - def __init__(self, version): - try: - v = version.name.strip() - parts = v.split(".") - major, minor, patch = map(int, parts) - except Exception as ex: - msg = f"Invalid tag format: '{version}', details: {ex}" - raise TagFormatError(msg) from ex - - self._version = version - self._version_tripple = (major, minor, patch) - - @property - def version(self): - return self._version - - @property - def version_triple(self): - return self._version_tripple - - class VersionInfo: def __init__(self, app, context, metadata, current_version_name): self.app = app @@ -129,7 +99,7 @@ def in_development(self): def __iter__(self): yield from self.branches yield from sorted( - self.tags, key=lambda t: ExasolVersionTag(t).version_triple, reverse=True + self.tags, key=lambda t: ExasolVersion.from_string(t.name), reverse=True ) def __getitem__(self, name): @@ -268,7 +238,7 @@ def setup(app): app.add_config_value("smv_metadata", {}, "html") app.add_config_value("smv_metadata_path", "", "html") app.add_config_value("smv_current_version", "", "html") - app.add_config_value("smv_latest_version", "master", "html") + app.add_config_value("smv_latest_version", "main", "html") app.add_config_value("smv_tag_whitelist", DEFAULT_TAG_WHITELIST, "html") app.add_config_value("smv_branch_whitelist", DEFAULT_BRANCH_WHITELIST, "html") app.add_config_value("smv_remote_whitelist", DEFAULT_REMOTE_WHITELIST, "html") @@ -283,7 +253,7 @@ def setup(app): app.connect("config-inited", config_inited) return { - "version": VERSION, + "version": PLUGIN_VERSION, "parallel_read_safe": True, "parallel_write_safe": True, } From 809d77630c2694c53bd2d72e1b2f5e6409dc12dc Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Mon, 11 Nov 2024 17:29:19 +0100 Subject: [PATCH 07/10] Improve documentation (#272) --------- Co-authored-by: Thomas Ubensee <34603111+tomuben@users.noreply.github.com> --- doc/changes/unreleased.md | 2 + doc/developer_guide/developer_guide.rst | 2 +- doc/developer_guide/ideas.rst | 28 -- .../modules/modules.rst | 2 +- .../modules/nox.rst | 0 .../modules/pre_commit_hooks.rst | 0 doc/developer_guide/modules/sphinx/sphinx.rst | 24 ++ .../multiversion/_templates/versioning.html | 14 - .../modules/sphinx/multiversion/changelog.rst | 81 ----- .../modules/sphinx/multiversion/conf.py | 44 --- .../sphinx/multiversion/configuration.rst | 341 ------------------ .../modules/sphinx/multiversion/context.rst | 160 -------- .../modules/sphinx/multiversion/faq.rst | 46 --- .../sphinx/multiversion/github_pages.rst | 89 ----- .../sphinx/multiversion/gitlab_pages.rst | 90 ----- .../sphinx/multiversion/multiversion.rst | 65 ---- .../sphinx/multiversion/quickstart.rst | 80 ---- .../modules/sphinx/multiversion/templates.rst | 168 --------- doc/user_guide/modules/sphinx/sphinx.rst | 7 - doc/user_guide/user_guide.rst | 1 - 20 files changed, 28 insertions(+), 1216 deletions(-) delete mode 100644 doc/developer_guide/ideas.rst rename doc/{user_guide => developer_guide}/modules/modules.rst (100%) rename doc/{user_guide => developer_guide}/modules/nox.rst (100%) rename doc/{user_guide => developer_guide}/modules/pre_commit_hooks.rst (100%) create mode 100644 doc/developer_guide/modules/sphinx/sphinx.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/_templates/versioning.html delete mode 100644 doc/user_guide/modules/sphinx/multiversion/changelog.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/conf.py delete mode 100644 doc/user_guide/modules/sphinx/multiversion/configuration.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/context.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/faq.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/github_pages.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/gitlab_pages.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/multiversion.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/quickstart.rst delete mode 100644 doc/user_guide/modules/sphinx/multiversion/templates.rst delete mode 100644 doc/user_guide/modules/sphinx/sphinx.rst diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 23285d5c9..62620ffe4 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -16,6 +16,8 @@ ## 📚 Documentation * Added Documentation on Metrics +* Added additional details regarding adjusted sphinx-multiversion +* Restructured documentation ## 🔩 Internal diff --git a/doc/developer_guide/developer_guide.rst b/doc/developer_guide/developer_guide.rst index d63f8ba6c..e2303b3f7 100644 --- a/doc/developer_guide/developer_guide.rst +++ b/doc/developer_guide/developer_guide.rst @@ -10,4 +10,4 @@ ../design development plugins - ideas + modules/modules diff --git a/doc/developer_guide/ideas.rst b/doc/developer_guide/ideas.rst deleted file mode 100644 index a8c82b273..000000000 --- a/doc/developer_guide/ideas.rst +++ /dev/null @@ -1,28 +0,0 @@ -Ideas ------ -.. todolist:: - -- Add commit hooks (version check etc.) for the toolbox itself -- Doc(s) tasks - - Add documentation on how to setup the development environment - - Add/Finish multiversion documentation support - - Cleanup multiversion documentation - -- Add pre commit hook config - - document how to install commit hooks - -- Add common/exasol specific pre_commit_hooks - - Add https://github.com/exasol/serial-version-uid-change-pre-commit-hook - -- Add generators for repetitive tasks - - Add generator for preparing adding tool configuration(s) - - Add .pre-commit-config.yaml generator - - Add workflow generator - - Add issue template generator - - Add pr template generator - - Add changelog.d template generator - -- Toolbox helper - - update and/or generated config, workflows, etc. - -- Convert Todo's list into issue(s) diff --git a/doc/user_guide/modules/modules.rst b/doc/developer_guide/modules/modules.rst similarity index 100% rename from doc/user_guide/modules/modules.rst rename to doc/developer_guide/modules/modules.rst index 84ef6b0f6..ac317dde0 100644 --- a/doc/user_guide/modules/modules.rst +++ b/doc/developer_guide/modules/modules.rst @@ -4,7 +4,7 @@ Modules .. toctree:: :maxdepth: 2 + sphinx/sphinx nox pre_commit_hooks - sphinx/sphinx diff --git a/doc/user_guide/modules/nox.rst b/doc/developer_guide/modules/nox.rst similarity index 100% rename from doc/user_guide/modules/nox.rst rename to doc/developer_guide/modules/nox.rst diff --git a/doc/user_guide/modules/pre_commit_hooks.rst b/doc/developer_guide/modules/pre_commit_hooks.rst similarity index 100% rename from doc/user_guide/modules/pre_commit_hooks.rst rename to doc/developer_guide/modules/pre_commit_hooks.rst diff --git a/doc/developer_guide/modules/sphinx/sphinx.rst b/doc/developer_guide/modules/sphinx/sphinx.rst new file mode 100644 index 000000000..fe831e5ab --- /dev/null +++ b/doc/developer_guide/modules/sphinx/sphinx.rst @@ -0,0 +1,24 @@ +sphinx +======= + +sphinx-multiversion ++++++++++++++++++++ + +The `sphinx-multiversion` extension is a modified copy of `Holzhaus/sphinx-multiversion `_. This copy was taken from version :code:`0.24.0`. + +It has been adjusted with minor code changes and modified defaults to work seamlessly with Exasol integration projects, which often require a specific project structure and layout. Additionally, it is designed to be used with an HTML theme that supports displaying and selecting multiple versions if the `versions` variable is set in the HTML context of sphinx. As of this writing, the theme used in conjunction with this modified version of `sphinx-multiversion` is `SHIBUYA `_, version :code:`2024.10.15`. + +.. attention:: + + **Attribution** + + A big thanks to the original author and project `Jan Holthuis `_, as well as `Samuel Dowling `_, as we took various patches for the plugin from his fork. + + Note: Both projects are published under the `BSD-2 license `_. + + * https://github.com/sphinx-contrib/multiversion + * https://github.com/samuel-emrys/sphinx-multiversion + +.. note:: + + In the long term, it would be advantageous to remove unnecessary features and code that are not required for Exasol's projects. Adding further tests would also be beneficial. However, the primary goal was to create a low-effort, stable multi-version support solution for our projects. diff --git a/doc/user_guide/modules/sphinx/multiversion/_templates/versioning.html b/doc/user_guide/modules/sphinx/multiversion/_templates/versioning.html deleted file mode 100644 index 6f084470a..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/_templates/versioning.html +++ /dev/null @@ -1,14 +0,0 @@ -{% if versions %} -

{{ _('Branches') }}

-
    - {%- for item in versions.branches %} -
  • {{ item.name }}
  • - {%- endfor %} -
-

{{ _('Tags') }}

- -{% endif %} diff --git a/doc/user_guide/modules/sphinx/multiversion/changelog.rst b/doc/user_guide/modules/sphinx/multiversion/changelog.rst deleted file mode 100644 index 4b4930f73..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/changelog.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. _changelog: - -========= -Changelog -========= - -Version 0.2 -=========== - -Version 0.2.4 (2020-08-12) --------------------------- - -* Skip file existence check for the :file:`.` directory. This fixes an issue if the configuration or source directory is in the local path but reported as missing, because ``git cat-file -e`` always reports an error in that case. (`#12 `_) -* Fix file existence check not working on Windows. (`#18 `_, `#19 `_) -* Fix bug in the sphinx extension which tried to load the `conf.py` from the source directory instead of the conf directory. This could lead to problems when the two directories differ. (`#11 `_, `#13 `_) -* Fix wrong import in :file:`__main__.py` that prevented invocation using ``python -m sphinx_multiversion``. (`#23 `_) -* Fix failure to find refs if ``sphinx-multiversion`` was not invoked from the root of the git repository. (`#24 `_, `#25 `_, `#26 `_) -* Resolve issues with Sphinx extensions and Python modules not being reloaded when parsing the different :file:`conf.py` files. Now, each config file is parsed in it's own process, and the build is performed using the ``subprocess`` module instead of doing it all from the context of the main module. Python's `interpreter flags `_ (e.g. isolated mode) are passed through to the subprocesses. (`#22 `_, `#28 `_, `#30 `_, `#36 `_) -* Rewrite the path handling of the Sphinx extension to handle branch names containing a forward slash properly on Windows and add unittests and Windows CI builds to make sure it doesn't break on future updates. (`#31 `_, `#35 `_) - - -Version 0.2.3 (2020-05-04) --------------------------- - -* Fixed return codes of main() function and exit with non-zero status if no matching refs were found. -* Added some logging calls to the git module. -* Fixed bug where local branch was used to check the existence of files on remote branches. - - -Version 0.2.2 (2020-05-01) --------------------------- - -* Added additional checks to determine if a branch or tag contains both the Sphinx source directory and the :file:`conf.py` file. If that's not the case, that branch or tag is skipped automatically and not copied to the temporary directory. (`#9 `_) - - -Version 0.2.1 (2020-04-19) --------------------------- - -* Fixed handling of absolute output paths in `vpathto` and ensure that all generated paths are relative. - - -Version 0.2.0 (2020-04-19) --------------------------- - -* Added a way to override config variables using placeholders that expand to each version's actual value (`#4 `_, `#7 `_). - - -Version 0.1 -=========== - -Version 0.1.1 (2020-03-12) --------------------------- - -* Fixed version number in documentation -* Fixed issue that caused the wrong configuration directory being used when the ``-c`` argument was not specified on the command line - -Version 0.1.0 (2020-03-11) --------------------------- - -* Initial release - - -.. _issue4: https://github.com/Holzhaus/sphinx-multiversion/issues/4 -.. _issue7: https://github.com/Holzhaus/sphinx-multiversion/issues/7 -.. _issue9: https://github.com/Holzhaus/sphinx-multiversion/issues/9 -.. _issue11: https://github.com/Holzhaus/sphinx-multiversion/issues/11 -.. _issue12: https://github.com/Holzhaus/sphinx-multiversion/issues/12 -.. _issue13: https://github.com/Holzhaus/sphinx-multiversion/issues/13 -.. _issue18: https://github.com/Holzhaus/sphinx-multiversion/issues/18 -.. _issue19: https://github.com/Holzhaus/sphinx-multiversion/issues/19 -.. _issue22: https://github.com/Holzhaus/sphinx-multiversion/issues/22 -.. _issue23: https://github.com/Holzhaus/sphinx-multiversion/issues/23 -.. _issue24: https://github.com/Holzhaus/sphinx-multiversion/issues/24 -.. _issue25: https://github.com/Holzhaus/sphinx-multiversion/issues/25 -.. _issue26: https://github.com/Holzhaus/sphinx-multiversion/issues/26 -.. _issue28: https://github.com/Holzhaus/sphinx-multiversion/issues/28 -.. _issue30: https://github.com/Holzhaus/sphinx-multiversion/issues/30 -.. _issue31: https://github.com/Holzhaus/sphinx-multiversion/issues/31 -.. _issue35: https://github.com/Holzhaus/sphinx-multiversion/issues/35 -.. _issue36: https://github.com/Holzhaus/sphinx-multiversion/issues/36 -.. _pythonflags: https://docs.python.org/3/using/cmdline.html#miscellaneous-options diff --git a/doc/user_guide/modules/sphinx/multiversion/conf.py b/doc/user_guide/modules/sphinx/multiversion/conf.py deleted file mode 100644 index 6078650a3..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/conf.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Sphinx configuration file.""" - -import time - -author = "Jan Holthuis" -project = "sphinx-multiversion" -release = "0.2.4" -version = "0.2" -copyright = "{}, {}".format(time.strftime("%Y"), author) - -html_theme = "alabaster" -html_theme_options = { - "github_repo": "sphinx-multiversion", - "github_user": "Holzhaus", - "github_banner": True, - "github_button": True, - "travis_button": True, - "show_relbar_bottom": True, -} -html_last_updated_fmt = "%c" -master_doc = "index" -pygments_style = "friendly" -templates_path = ["_templates"] -extensions = [ - "sphinx_multiversion", -] - -templates_path = [ - "_templates", -] - -html_sidebars = { - "**": [ - "about.html", - "navigation.html", - "relations.html", - "searchbox.html", - "versioning.html", - ], -} - -smv_remote_whitelist = r"^origin$" -smv_branch_whitelist = r"^master$" -smv_tag_whitelist = r"^v\d+\.\d+\.\d+$" # all tags like "v1.0.0" diff --git a/doc/user_guide/modules/sphinx/multiversion/configuration.rst b/doc/user_guide/modules/sphinx/multiversion/configuration.rst deleted file mode 100644 index 0fa401635..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/configuration.rst +++ /dev/null @@ -1,341 +0,0 @@ -.. _configuration: - -============= -Configuration -============= - -``sphinx-multiversion`` reads your Sphinx :file:`conf.py` file for configuration. -As usual, you can also override certain options by using ``-D var=value`` on the command line. - -This is what the default configuration looks like: - -.. code-block:: python - - # Whitelist pattern for tags (set to None to ignore all tags) - smv_tag_whitelist = r'^.*$' - - # Whitelist pattern for branches (set to None to ignore all branches) - smv_branch_whitelist = r'^.*$' - - # Whitelist pattern for remotes (set to None to use local branches only) - smv_remote_whitelist = None - - # Pattern for released versions - smv_released_pattern = r'^tags/.*$' - - # Format for versioned output directories inside the build directory - smv_outputdir_format = '{ref.name}' - - # Determines whether remote or local git branches/tags are preferred if their output dirs conflict - smv_prefer_remote_refs = False - - # Run a command before invoking sphinx-build - smv_prebuild_command = 'doxygen' - - # Regular expression of files and directories to export to outputdir after running smv_prebuild_command - smv_prebuild_export_pattern = 'doxygen$' - - # Export files and directories matching smv_prebuild_export_pattern to this subdirectory of outputdir - smv_prebuild_export_destination = 'doxygen' - - # Specify build targets and whether the resulting artefacts should be downloadable - smv_build_targets = { - "HTML" : { - "builder": "html", - "downloadable": False, - "download_format": "", - }, - } - - # Flag indicating whether the intermediate build directories should be removed after artefacts are produced - smv_clean_intermediate_files = True - - -You can override all of these values inside your :file:`conf.py`. - -.. note:: - - You can check which tags/branches are matched by running ``sphinx-multiversion`` with the ``--dump-metadata`` flag. Branches or tags that don't contain both the sphinx source directory and the :file:`conf.py` file will be skipped automatically. - -Tag/Branch/Remote whitelists -============================ - -Tags, Branches and Remotes are included by `Regular Expressions `_. -Here are some examples: - -.. code-block:: python - - smv_tag_whitelist = r'^.*$' # Include all tags - smv_tag_whitelist = r'^v\d+\.\d+$' # Include tags like "v2.1" - - smv_branch_whitelist = r'^.*$' # Include all branches - smv_branch_whitelist = r'^(?!master).*$' # Include all branches except "master" - - smv_remote_whitelist = None # Only use local branches - smv_remote_whitelist = r'^.*$' # Use branches from all remotes - smv_remote_whitelist = r'^(origin|upstream)$' # Use branches from origin and upstream - -.. note:: - - To list values to match, you can use ``git branch``, ``git tag`` and ``git remote``. - - -Release Pattern -=============== - -A Regular Expression is used to determine if a version of the documentation has been released or if it's a development version. -To allow more flexibility, the regex is evaluated over the full refname. - -Here are some examples: - -.. code-block:: python - - smv_released_pattern = r'^tags/.*$' # Tags only - smv_released_pattern = r'^heads/\d+\.\d+$' # Branches like "2.1" - smv_released_pattern = r'^(tags/.*|heads/\d+\.\d+)$' # Branches like "2.1" and all tags - smv_released_pattern = r'^(heads|remotes/[^/]+)/(?!:master).*$' # Everything except master branch - -.. note:: - - To list all refnames , you can use: - - .. code-block:: bash - - git for-each-ref --format "%(refname)" | sed 's/^refs\///g' - -Pre and post-build command -========================== - -In some cases it may be necessary to run a command in the checked out directory before or after building with sphinx. For example if you are using ``sphinx-apidoc`` to generate the autodoc api source files. - -The options ``smv_prebuild_command`` and ``smv_postbuild_command`` are provided to facilitate this, along with the ``smv_prebuild_export_pattern`` and ``smv_prebuild_export_directory`` options to allow you to optionally select which files resulting from these commands should be moved to the output directory, should it be required. Equivalents for these commands are also available in the postbuild case. - -For example: - -.. code-block:: python - - # Run sphinx-apidoc prior to invoking sphinx-build, and place the output in the docs/api directory - smv_prebuild_command = "sphinx-apidoc -o docs/api mymodule" - -.. code-block:: python - - # Run doxgen prior to running sphinx-build - smv_prebuild_command = "doxygen" - # Find the path to the directory titled 'doxygen' - smv_prebuild_export_pattern = 'doxygen$' - # Copy the doxygen build directory to the output directory - smv_prebuild_export_destination = 'doxygen' - -.. code-block:: python - - # Make the doxygen generated latex files into pdfs - # NOTE: This directory would need to exist on all whitelisted branches and tags. - # More complex logic may be required in your individual use case. - smv_postbuild_command = "cd doxygen/latex && make" - # Find all files matching the pattern *.pdf - smv_postbuild_export_pattern = '.*.pdf' - # Export the matching files to the artefacts directory - smv_postbuild_export_destination = 'artefacts' - -Output Directory Format -======================= - -Each version will be built into a seperate subdirectory of the Sphinx output directory. -The ``smv_outputdir_format`` setting determines the directory structure for the subdirectories. It is a new-style Python formatting string with two parameters - ``ref`` and ``config``. - -Here are some examples: - -.. code-block:: python - - smv_outputdir_format = '{ref.name}' # Use the branch/tag name - smv_outputdir_format = '{ref.commit}' # Use the commit hash - smv_outputdir_format = '{ref.commit:.7s}' # Use the commit hash truncated to 7 characters - smv_outputdir_format = '{ref.refname}' # Use the full refname - smv_outputdir_format = '{ref.source}/{ref.name}' # Equivalent to the previous example - smv_outputdir_format = 'versions/{config.release}' # Use "versions" as parent directory and the "release" variable from conf.py - smv_outputdir_format = '{config.version}/{ref.name}' # Use the version from conf.py as parent directory and the branch/tag name as subdirectory - - -.. seealso:: - - Have a look at `PyFormat `_ for information how to use new-style Python formatting. - -Specify Additional Build Targets -================================ - -In addition to generating static HTML documentation, it is also possible to specify additional build targets for each version of your documentation by providing a value for the ``smv_build_targets`` setting. This can be used to generate and package the documentation for download, or for post processing by an external program. The ``smv_build_targets`` setting has the following format: - -.. code-block:: - - smv_build_targets = { - "build_target_name" : { - "builder": , - "downloadable": bool, - "download_format": str - }, - } - -These fields can be populated as follows: - -* ``build_target_name``: This is the name of the build target. It must be unique within the ``smv_build_targets`` dictionary, and is used as the display name of the download artefacts if ``downloadable == True``. -* ``builder``: This is the string identifying any valid `sphinx builder `_. -* ``downloadable``: Indicate whether an artefact for this build should be generated. All artefacts are placed within the ``build/version/artefacts`` directory and made available in the html context. -* ``download_format``: A string indicating the format of the final downloadable artefact. Only valid if ``downloadable == True``. Valid values for this include ``tar``, ``zip``, ``pdf``, ``epub``, or any other extension for build artefacts produced by the sphinx builder specified in ``builder``. - - .. note:: - - If ``tar`` or ``zip`` are specified, the entire build directory is archived. An example of this would be the ``html`` directory for a ``html`` sphinx builder, or the ``latex`` directory for a ``latex`` sphinx builder. - - .. note:: - - When the build artefact is an individual file, it is only matched according to the pattern . to avoid the ambiguity associated with multiple matches to a file extension. To illustrate this limitation, html files are always indexed with ``index.html``, which would not be identified as an individual build artefact. Thus, in order to make HTML available as a build artefact it must be archived using ``zip``, ``tar``, ``gztar``, ``bztar`` or ``xztar``. - -Some common examples may be as follows: - -.. code-block:: python - - smv_build_targets = { - "HTML" : { - "builder": "html", - "downloadable": True, - "download_format": "zip", - }, - "SingleHTML" : { - "builder": "singlehtml", - "downloadable": True, - "download_format": "tar", - }, - "PDF" : { - "builder": "latexpdf", # This will build a .pdf file after generating latex documents - "downloadable": True, - "download_format": "pdf", - }, - "LaTeX" : { - "builder": "latex", # This will only generate latex documents. - "downloadable": True, - "download_format": "gztar", - }, - "ePub" : { - "builder": "epub", - "downloadable": True, - "download_format": "epub", - }, - } - -Additionally, the user is able to configure whether intermediate build files are cleaned from the output directory using the ``smv_clean_intermediate_files`` setting: - -.. code-block:: python - - smv_clean_intermediate_files = True - -If this flag is ``True``, the resulting directory structure will resemble the following: - -.. code-block:: bash - - build - ├── develop - │   ├── artefacts - │   │   ├── example_docs-develop.epub - │   │   ├── example_docs-develop-HTML.zip - │   │   └── example_docs-develop.pdf - │   ├── index.html - │   └── ... - ├── master - │   ├── artefacts - │   │   ├── example_docs-master.epub - │   │   ├── example_docs-master-HTML.zip - │   │   └── example_docs-master.pdf - │   ├── index.html - │   └── ... - └── v0.1.0 - ├── artefacts - │   ├── example_docs-v0.1.0.epub - │   ├── example_docs-v0.1.0-HTML.zip - │   └── example_docs-v0.1.0.pdf - ├── index.html - └── ... - -However, if this flag is set to ``False``, the resulting directory will also include intermediate build directories: - -.. code-block:: bash - - build - ├── develop - │   ├── artefacts - │   │   ├── example_docs-develop.epub - │   │   ├── example_docs-develop-HTML.zip - │   │   └── example_docs-develop.pdf - │   ├── epub - │   │   ├── example.epub - │   │   ├── index.xhtml - │   │   └── ... - │   ├── html - │   │   ├── index.html - │   │   └── ... - │   ├── index.html - │   ├── latexpdf - │   │   └── latex - │   └── ... - ├── master - │   ├── artefacts - │   │   ├── example_docs-master.epub - │   │   ├── example_docs-master-HTML.zip - │   │   └── example_docs-master.pdf - │   ├── epub - │   │   ├── example.epub - │   │   ├── index.xhtml - │   │   └── ... - │   ├── html - │   │   ├── index.html - │   │   └── ... - │   ├── index.html - │   ├── latexpdf - │   │   └── latex - │   └── ... - └── v0.1.0 - ├── artefacts - │   ├── example_docs-v0.1.0.epub - │   ├── example_docs-v0.1.0-HTML.zip - │   └── example_docs-v0.1.0.pdf - ├── epub - │   ├── example.epub - │   ├── index.xhtml - │   └── ... - ├── html - │   ├── index.html - │   └── ... - ├── index.html - ├── latexpdf - │   └── latex - └── ... - -This will be useful if you want to use an external program to interact with the build output. - - -Overriding Configuration Variables -================================== - -You can override configuration variables the same way as you're used to with ``sphinx-build``. - -Since ``sphinx-multiversion`` copies the branch data into a temporary directory and builds them there while leaving the current working directory unchanged, relative paths in your :file:`conf.py` will refer to the path of the version *you're building from*, not the path of the version you are trying to build documentation for. - -Sometimes it might be necessary to override the configured path via a command line overide. -``sphinx-multiversion`` allows you to insert placeholders into your override strings that will automatically be replaced with the correct value for the version you're building the documentation for. - -Here's an example for the `exhale extension `_: - -.. code-block:: python - - sphinx-multiversion docs build/html -D 'exhale_args.containmentFolder=${sourcedir}/api' - -.. note:: - - Make sure to enclose the override string in single quotes (``'``) to prevent the shell from treating it as an environment variable and replacing it before it's passed to ``sphinx-multiversion``. - -.. note:: - - To see a list of available placeholder names and their values for each version you can use the ``--dump-metadata`` flag. - -.. _python_regex: https://docs.python.org/3/howto/regex.html -.. _python_format: https://pyformat.info/ -.. _exhale: https://exhale.readthedocs.io/en/latest/ diff --git a/doc/user_guide/modules/sphinx/multiversion/context.rst b/doc/user_guide/modules/sphinx/multiversion/context.rst deleted file mode 100644 index 4fea4a930..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/context.rst +++ /dev/null @@ -1,160 +0,0 @@ -.. _context: - -============ -HTML Context -============ - -The following variables and functions are exposed to the `Sphinx HTML builder context `_ in all versions. - -``Version`` Objects -=================== - -All versions will be exposed to the HTML context as ``Version`` objects with the following attributes: - -.. attribute:: name - - The branch or tag name. - -.. attribute:: url - - The URL to the current page in this version. - -.. attribute:: version - - The value of the ``version`` variable in ``conf.py``. - -.. attribute:: release - - The value of the ``release`` variable in ``conf.py``. - -.. attribute:: is_released - - ``True`` if this version matches the :ref:`configured ` ``smv_released_pattern`` regular expression, else ``False``. - - -Versions -======== - -The most important variable is ``versions``, which can be used to iterate over all found (and whitelisted) versions. - -.. attribute:: versions - - An iterable that yields all ``Version`` objects. - - .. code-block:: jinja - -

Versions

- - -.. attribute:: versions.branches - - You can use the ``branches`` property of the ``versions`` iterable to get the ``Version`` objects for all branches. - - .. code-block:: jinja - -

Branches

-
    - {%- for item in versions.branches %} -
  • {{ item.name }}
  • - {%- endfor %} -
- -.. attribute:: versions.tags - - You can use the ``tags`` property of the ``versions`` iterable to get the ``Version`` objects for all tags. - - .. code-block:: jinja - -

Tags

- - -.. attribute:: versions.releases - - You can use the ``releases`` property of the ``versions`` iterable to get all ``Version`` objects where the ``ìs_released`` attribute is ``True``. - This is determined by the ``smv_released_pattern`` in the :ref:`Configuration `. - - .. code-block:: jinja - -

Releases

-
    - {%- for item in versions.releases %} -
  • {{ item.name }}
  • - {%- endfor %} -
- -.. attribute:: versions.in_development - - You can use the ``in_development`` property of the ``versions`` iterable to get all ``Version`` objects where the ``ìs_released`` attribute is ``False``. - This is determined by the ``smv_released_pattern`` in the :ref:`Configuration `. - - .. code-block:: jinja - -

In Development

-
    - {%- for item in versions.in_development %} -
  • {{ item.name }}
  • - {%- endfor %} -
- -Functions -========= - -Similar to Sphinx's `hasdoc() `_ function. - -.. function:: vhasdoc(other_version) - - This function is Similar to Sphinx's `hasdoc() `_ function. - It takes ``other_version`` as string and returns ``True`` if the current document exists in another version. - - .. code-block:: jinja - - {% if vhasdoc('master') %} - This page is available in master. - {% endif %} - -.. function:: vpathto(other_version) - - This function is Similar to Sphinx's `pathto() `_ function. - It takes ``other_version`` as string and returns the relative URL to the current page in the other version. - If the current page does not exist in that version, the relative URL to its `master_doc `_ is returned instead. - - .. code-block:: jinja - - {% if vhasdoc('master') %} - This page is also available in master. - {% else %} - Go to master for the latest docs. - {% endif %} - -Other Variables -=============== - -.. attribute:: current_version - - A ``Version`` object for of the current version being built. - - .. code-block:: jinja - -

Current Version: {{ current_version.name }}

- -.. attribute:: latest_version - - A ``Version`` object of the latest released version being built. - - .. code-block:: jinja - -

Latest Version: {{ latest_version.name }}

- - -.. _sphinx_context: http://www.sphinx-doc.org/en/stable/config.html?highlight=context#confval-html_context -.. _sphinx_master_doc: http://www.sphinx-doc.org/en/stable/config.html?highlight=context#confval-master_doc -.. _sphinx_hasdoc: http://www.sphinx-doc.org/en/stable/templating.html#hasdoc -.. _sphinx_pathto: http://www.sphinx-doc.org/en/stable/templating.html#pathto diff --git a/doc/user_guide/modules/sphinx/multiversion/faq.rst b/doc/user_guide/modules/sphinx/multiversion/faq.rst deleted file mode 100644 index 5ad920495..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/faq.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _faq: - -========================== -Frequently Asked Questions -========================== - -Why another tool for versioning Sphinx docs? -============================================ - -While there are several sphinx extensions out there (e.g. `sphinxcontrib-versioning `_ or `sphinx-versions `_) none of them seem to work correctly with recent sphinx versions (as of March 2020). -Their code heavily relies on monkey-patching Sphinx internals at runtime, which is error-prone and makes the code a mess. - -In contrast, the extension part of ``sphinx-multiversion`` does not do any fancy patching, it just provides some HTML context variables. - - -How does it work? -================= - -Instead of running `sphinx build`, just run `sphinx-multiversion` from the root of your Git repository. -It reads your Sphinx :file:`conf.py` file from the currently checked out Git branch for configuration, then generates a list of versions from local or remote tags and branches. -This data is written to a JSON file - if you want to have a look what data will be generated, you can use the ``--dump-metadata`` flag. - -Then it copies the data for each version into separate temporary directories, builds the documentation from each of them and writes the output to the output directory. -The :file:`conf.py` file from the currently checked out branch will be used to build old versions, so it's not necessary to make changes old branches or tags to add support for ``sphinx-multiversion``. -This also means that theme improvements, template changes, etc. will automatically be applied to old versions without needing to add commits. - - -Do I need to make changes to old branches or tags? -================================================== - -No, you don't. ``sphinx-multiversion`` will always use the :file:`conf.py` file from your currently checked out branch. - -The downside is that this behaviour restricts the kinds of changes you may do to your configuration, because it needs to retain compatibility with old branches. -For example, if your :file:`conf.py` file hardcodes a path (e.g. for opening a file), but that file does not exist in some older branches that you want to build documentation for, this will cause issues. -In these cases you will need to add a check if a file actually exists and adapt the path accordingly. - - -What are the license terms of ``sphinx-multiversion``? -====================================================== - -``sphinx-multiversion`` is licensed under the terms of the `BSD 2-Clause license `_. - - -.. _sphinxcontrib_versioning: https://github.com/sphinx-contrib/sphinxcontrib-versioning -.. _sphinx_versions: https://github.com/Smile-SA/sphinx-versions -.. _bsd_2clause_license: https://choosealicense.com/licenses/bsd-2-clause/ diff --git a/doc/user_guide/modules/sphinx/multiversion/github_pages.rst b/doc/user_guide/modules/sphinx/multiversion/github_pages.rst deleted file mode 100644 index 9e4b0d28e..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/github_pages.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. _github_pages: - -======================= -Hosting on GitHub Pages -======================= - -You use `GitHub Pages `_ to host documentation generated by ``sphinx-multiversion``. - -Setting up the ``gh-pages`` Branch -================================== - -First, you need to create a ``gh-pages`` branch and disable Jekyll. - -.. code-block:: bash - - git checkout --orphan gh-pages - touch .nojekyll - git add .nojekyll - git commit -m "Disable Jekyll" - -Then, switch back to the branch you were on and build the documentation using ``sphinx-multiversion``: - -.. code-block:: bash - - mkdir html - sphinx-multiversion docs/ html/ - -If everything worked fine, you now need to switch back to your ``gh-pages`` branch and commit the data there: - -.. code-block:: bash - - git checkout gh-pages - for dirname in html/*; do mv "html/$dirname" "$dirname" && git add "$dirname"; done - git commit -m "Added HTML docs" - git push origin gh-pages - -Now your documentation should already be online. -You can navigate to ``https://username.github.io/reponame/master/`` to see the documentation for the master branch. - -Redirecting from the Document Root -================================== - -You can easily redirect users that type ``https://username.github.io/reponame/`` into their addressbar to the documentation for any version you like. -Just add a :file:`index.html` file to the root directory of your ``gh-pages`` branch: - -.. code-block:: html - - - - - Redirecting to master branch - - - - - - -Automating documentation builds with Travis CI -============================================== - -You can also automate versioned builds using Travis CI. -To do that, add this to your :file:`.travis.yml` file: - -.. code-block:: yaml - - script: - # Build documentation - - mkdir html - - sphinx-multiversion docs/ html/ - - before_deploy: - # Add .nojekyll file and redirect from docroot to the sphinx output dir - - touch html/.nojekyll - - cp assets/gh-pages-redirect.html html/index.html - - deploy: - # Only deploy the sphinx output dir as gh-pages branch - - provider: pages - skip_cleanup: true - github_token: $GITHUB_TOKEN - keep_history: false - local_dir: html - -.. seealso:: - - For details, please have a look at the `GitHub Pages Deployment documentation for Travis CI `_. - -.. _github_pages_website: https://pages.github.com/ -.. _travis_gh_pages_deployment: https://docs.travis-ci.com/user/deployment/pages/ diff --git a/doc/user_guide/modules/sphinx/multiversion/gitlab_pages.rst b/doc/user_guide/modules/sphinx/multiversion/gitlab_pages.rst deleted file mode 100644 index 23f913d0b..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/gitlab_pages.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. _gitlab_pages: - -======================= -Hosting on GitLab Pages -======================= - -You use `GitLab Pages <_gitlab_pages_website>`_ to host documentation generated by ``sphinx-multiversion``. - -Configure your project -====================== - -Because of the way GitLab checks out a repository when running a CI task, you'll need to whitelist remote branches in your ``conf.py``. - -.. code-block:: python - - smv_remote_whitelist = r'^(origin)$' - -If this is not specified, ``sphinx-multiversion`` will only be able to generate documentation for whitelisted tag patterns. - -Create ``.gitlab-ci.yml`` -========================= - -GitLab pages always deploys your website from a specific folder called ``public`` in your repository. To deploy to your site, GitLab pages uses its built in continuous integration tools to build your site and publish it to the GitLab server. To accomplish this, you need to create a ``.gitlab-ci.yml`` in your repository. This recipe will build your documentation, move it to a folder named ``public``, and then create an artifact compressing this folder. Populate it as follows. - -.. code-block:: yaml - - test: - image: python:latest - stage: test - before_script: - - export - - apt update -y - - apt install -y texlive latexmk texlive-latex-extra # only necessary for pdf generation - - pip install -r requirements.txt - script: - - sphinx-multiversion docs/source/ public - tags: - - docker # may need removal depending on what available GitLab runners are tagged with - - bash - only: - - branches - except: - - master - - pages: - image: python:latest - stage: deploy - before_script: - - export - - apt update -y - - apt install -y texlive latexmk texlive-latex-extra # only necessary for pdf generation - - pip install -r requirements.txt - script: - - sphinx-multiversion docs/source public - - | # Add index.html to public root to redirect to $CI_DEFUALT_BRANCH/index.html - cat >public/index.html << EOF - - - - Redirecting to $CI_DEFAULT_BRANCH branch - - - - - - EOF - tags: - - docker # may need removal depending on what available GitLab runners are tagged with - - bash - artifacts: - paths: - - public - only: - - develop - -This will create two jobs. The first job will test that documentation generation will complete successfully. This will run for every branch with the exception of ``master``. The second task will deploy the generated documents to the GitLab pages server. This task will run only on changes to the ``develop`` branch. These rules should be updated to reflect your desired behaviour. Note that this includes the addition of a dummy :file:`index.html` to the root of your GitLab ``public`` directory that redirects to documentation on the ``$CI_DEFAULT_BRANCH``. - -.. seealso:: - - A list of predefined environment variables available for use in ``.gitlab-ci.yml`` is available in the `GitLab Predefined variables reference <_gitlab_predefined_variables>`_. - -For deployments to ``.gitlab.com``, the default domain for GitLab pages websites is ``*.gitlab.io``. Your documentation should be available at ``https://username.gitlab.io/reponame``. - -.. seealso:: - - For details, please have a look at the `GitLab Pages Documentation <_gitlab_pages_tutorial>`_. - -.. _gitlab_pages_website: https://docs.gitlab.com/ee/user/project/pages/ -.. _gitlab_pages_tutorial: https://docs.gitlab.com/ee/user/project/pages/getting_started/pages_from_scratch.html -.. _gitlab_predefined_variables: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html diff --git a/doc/user_guide/modules/sphinx/multiversion/multiversion.rst b/doc/user_guide/modules/sphinx/multiversion/multiversion.rst deleted file mode 100644 index ec734583e..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/multiversion.rst +++ /dev/null @@ -1,65 +0,0 @@ -sphinx-multiversion -=================== -A Sphinx extension for building self-hosted versioned documentation. - -.. note:: - - The initial version of this tool/plugin was taken from `Holzhaus/sphinx-multiversion `_, - also various patches from this `samuel-emrys/sphinx-multiversion `_ fork have been applied. - - Both project's have been published under the BSD-2 license and contained the following license text: - - .. code-block:: console - - BSD 2-Clause License - - Copyright (c) 2020, Jan Holthuis - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - Footer - - - So a big thanks to `Jan Holthuis `_ and `Samuel Dowling `_! - - -Project Links -------------- - -.. toctree:: - :maxdepth: 3 - :caption: General - - quickstart - configuration - templates - context - -.. toctree:: - :maxdepth: 1 - :caption: Appendix - - github_pages - gitlab_pages - faq - changelog - diff --git a/doc/user_guide/modules/sphinx/multiversion/quickstart.rst b/doc/user_guide/modules/sphinx/multiversion/quickstart.rst deleted file mode 100644 index c41b5f31d..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/quickstart.rst +++ /dev/null @@ -1,80 +0,0 @@ -.. _quickstart: - -========== -Quickstart -========== - -To be able to build multiple versions of Sphinx documentation, ``sphinx-multiversion`` acts as wrapper for ``sphinx-build``. -If you're already using Sphinx documentation for your project, you can now use ``sphinx-multiversion`` to build the HTML documentation. -You can check if it works by running: - -.. code-block:: bash - - # Without sphinx-multiversion - sphinx-build docs build/html - - # With sphinx-multiversion - sphinx-multiversion docs build/html - -Don't worry - no version picker will show up in the generated HTML yet. -You need to :ref:`configure ` the extension first. - -.. seealso:: - - If you're not using Sphinx yet, have a look at the `tutorial `_. - -Next, you need to add the extension to the :file:`conf.py` file. - -.. code-block:: python - - extensions = [ - "sphinx_multiversion", - ] - -To make the different versions show up in the HTML, you also need to add a custom template. For example, you could create a new template named :file:`versioning.html` with the following content: - -.. code-block:: html - - {% if versions %} -

{{ _('Versions') }}

- - {% endif %} - -.. seealso:: - - You can also list branches, tags, released versions and development branches separately. - See :ref:`Templates ` for details. - -Assuming that you're using a theme with sidebar widget support, you just need to make sure that the file is inside the ``templates_path`` and add it to the `html_sidebars `_ variable. - -.. code-block:: python - - templates_path = [ - "_templates", - ] - - html_sidebars = { - '**': [ - 'versioning.html', - ], - } - -Now rebuild the documentation: - -.. code-block:: bash - - sphinx-multiversion docs build/html - -Done! - -.. seealso:: - - By default, all local branches and tags will be included. If you only want to include certain branches/tags or also include remote branches, see :ref:`Configuration `. - - -.. _sphinx_tutorial: http://www.sphinx-doc.org/en/stable/tutorial.html -.. _sphinx_html_sidebars: https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_sidebars diff --git a/doc/user_guide/modules/sphinx/multiversion/templates.rst b/doc/user_guide/modules/sphinx/multiversion/templates.rst deleted file mode 100644 index 5a484646f..000000000 --- a/doc/user_guide/modules/sphinx/multiversion/templates.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. _templates: - -========= -Templates -========= - -``sphinx-multiversion`` does not change the look of your HTML output by default. -Instead, you can customize the template to cater to your needs. - - -Version Listings -================ - -To add version listings to your template, you need to add a custom template to your theme. - -You can take one of the snippets below, put it into :file:`_templates/versioning.html` and add it to your theme's sidebar: - -.. code-block:: html - - templates_path = [ - "_templates", - ] - - html_sidebars = [ - "versioning.html", - ] - - -List all branches/tags ----------------------- - -.. code-block:: html - - {% if versions %} -

{{ _('Versions') }}

- - {% endif %} - -List branches and tags separately ---------------------------------- - -.. code-block:: html - - {% if versions %} -

{{ _('Branches') }}

-
    - {%- for item in versions.branches %} -
  • {{ item.name }}
  • - {%- endfor %} -
-

{{ _('Tags') }}

- - {% endif %} - -List releases and development versions separately -------------------------------------------------- - -.. code-block:: html - - {% if versions %} -

{{ _('Releases') }}

-
    - {%- for item in versions.releases %} -
  • {{ item.name }}
  • - {%- endfor %} -
-

{{ _('In Development') }}

-
    - {%- for item in versions.in_development %} -
  • {{ item.name }}
  • - {%- endfor %} -
- {% endif %} - -List available downloads ------------------------- - -.. code-block:: html - - {% if current_version.artefacts %} -

{{ _('Downloads') }}

- - {% endif %} - -Version Banners -=============== - -You can also add version banners to your theme, for example create a template file page.html in the templates directory: - -.. code-block:: html - - {% extends "!page.html" %} - {% block body %} - {% if current_version and latest_version and current_version != latest_version %} -

- - {% if current_version.is_released %} - You're reading an old version of this documentation. - If you want up-to-date information, please have a look at {{latest_version.name}}. - {% else %} - You're reading the documentation for a development version. - For the latest released version, please have a look at {{latest_version.name}}. - {% endif %} - -

- {% endif %} - {{ super() }} - {% endblock %}% - - -ReadTheDocs Theme -================= - -As of version 0.4.3, the `Read the Docs theme `_ does not support sidebar widgets. -So instead of adding a custom template to ``html_sidebars``, you need to create a template file named :file:`versions.html` with the following content: - -.. code-block:: html - - {%- if current_version %} -
- - Other Versions - v: {{ current_version.name }} - - -
- {%- if versions.tags %} -
-
Tags
- {%- for item in versions.tags %} -
{{ item.name }}
- {%- endfor %} -
- {%- endif %} - {%- if versions.branches %} -
-
Branches
- {%- for item in versions.branches %} -
{{ item.name }}
- {%- endfor %} -
- {%- endif %} - {%- if current_version.artefacts %} -
-
Downloads
- {%- for artefact in current_version.artefacts %} -
{{ artefact.name }}
- {%- endfor %} -
- {%- endif %} -
-
- {%- endif %} - - -.. _sphinx_rtd_theme: https://pypi.org/project/sphinx-rtd-theme/ diff --git a/doc/user_guide/modules/sphinx/sphinx.rst b/doc/user_guide/modules/sphinx/sphinx.rst deleted file mode 100644 index 3ab400d5f..000000000 --- a/doc/user_guide/modules/sphinx/sphinx.rst +++ /dev/null @@ -1,7 +0,0 @@ -sphinx -======= - -.. toctree:: - :maxdepth: 1 - - multiversion/multiversion diff --git a/doc/user_guide/user_guide.rst b/doc/user_guide/user_guide.rst index 44ebbb6c0..5e46127d7 100644 --- a/doc/user_guide/user_guide.rst +++ b/doc/user_guide/user_guide.rst @@ -10,5 +10,4 @@ getting_started workflows customization - modules/modules From fc2fc48c7b13b53250625afb97ec1ae3ce43e58d Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Tue, 12 Nov 2024 13:02:30 +0100 Subject: [PATCH 08/10] Refactor documenation nox tasks (#273) --- .github/workflows/checks.yml | 2 +- .github/workflows/gh-pages.yml | 2 +- doc/changes/unreleased.md | 5 +++++ doc/user_guide/getting_started.rst | 8 +++---- exasol/toolbox/nox/_documentation.py | 22 ++++++++++++++++--- .../templates/github/workflows/checks.yml | 2 +- 6 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index fa2dffce6..e6d198462 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -38,7 +38,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run python -m nox -s docs:build Lint: name: Linting (Python-${{ matrix.python-version }}) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index e4fc84de4..fceeb2c18 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -18,7 +18,7 @@ jobs: - name: Build Documentation run: | - poetry run sphinx-multiversion doc/ .html-documentation + poetry run python -m nox -s docs:multiversion - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.6.3 diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 62620ffe4..852ae8304 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -3,10 +3,15 @@ ## 🚨 Breaking Changes * Dropped python 3.8 support +* Changed names of Documentation related nox tasks + - `build-docs` -> `docs:build` + - `open-docs` -> `docs:open` + - `clean-docs` -> `docs:clean` ## ✨ Added * Added support for multi version Documentation +* Added nox tasks for building multi-version documentation ## 🐞 Fixed diff --git a/doc/user_guide/getting_started.rst b/doc/user_guide/getting_started.rst index 37828f833..f8799e97f 100644 --- a/doc/user_guide/getting_started.rst +++ b/doc/user_guide/getting_started.rst @@ -71,7 +71,7 @@ Build and open the documentation: .. code-block:: shell - nox -s build-docs open-docs + nox -s docs:build docs:open Execute the unit tests of the project: @@ -191,9 +191,9 @@ You are ready to use the toolbox. With *nox -l* you can list all available tasks - unit-tests -> Runs all unit tests - integration-tests -> Runs the all integration tests - coverage -> Runs all tests (unit + integration) and reports the code coverage - - build-docs -> Builds the project documentation - - open-docs -> Opens the built project documentation - - clean-docs -> Removes the documentations build folder + - docs:build -> Builds the project documentation + - docs:open -> Opens the built project documentation + - docs:clean -> Removes the documentations build folder - report -> Collects and generates a metrics summary for the workspace sessions marked with * are selected, sessions marked with - are skipped. diff --git a/exasol/toolbox/nox/_documentation.py b/exasol/toolbox/nox/_documentation.py index 20f1909c1..709f3f228 100644 --- a/exasol/toolbox/nox/_documentation.py +++ b/exasol/toolbox/nox/_documentation.py @@ -26,13 +26,29 @@ def _build_docs(session: nox.Session, config: Config) -> None: ) -@nox.session(name="build-docs", python=False) +def _build_multiversion_docs(session: nox.Session, config: Config) -> None: + session.run( + "poetry", + "run", + "sphinx-multiversion", + f"{config.doc}", + DOCS_OUTPUT_DIR, + ) + + +@nox.session(name="docs:multiversion", python=False) +def build_multiversion(session: Session) -> None: + """Builds the project documentation""" + _build_multiversion_docs(session, PROJECT_CONFIG) + + +@nox.session(name="docs:build", python=False) def build_docs(session: Session) -> None: """Builds the project documentation""" _build_docs(session, PROJECT_CONFIG) -@nox.session(name="open-docs", python=False) +@nox.session(name="docs:open", python=False) def open_docs(session: Session) -> None: """Opens the built project documentation""" docs_folder = PROJECT_CONFIG.root / DOCS_OUTPUT_DIR @@ -42,7 +58,7 @@ def open_docs(session: Session) -> None: webbrowser.open_new_tab(index.as_uri()) -@nox.session(name="clean-docs", python=False) +@nox.session(name="docs:clean", python=False) def clean_docs(_session: Session) -> None: """Removes the documentations build folder""" docs_folder = PROJECT_CONFIG.root / DOCS_OUTPUT_DIR diff --git a/exasol/toolbox/templates/github/workflows/checks.yml b/exasol/toolbox/templates/github/workflows/checks.yml index 06d557bae..fea1ed128 100644 --- a/exasol/toolbox/templates/github/workflows/checks.yml +++ b/exasol/toolbox/templates/github/workflows/checks.yml @@ -44,7 +44,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run python -m nox -s docs:build Lint: name: Linting (Python-${{ matrix.python-version }}) From 2e4803ad992762537b4706a8502145eed58d7f59 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Wed, 13 Nov 2024 16:33:59 +0100 Subject: [PATCH 09/10] Refactor nox task names (#275) --- .github/workflows/checks.yml | 8 +-- .github/workflows/report.yml | 4 +- doc/changes/unreleased.md | 21 +++++-- doc/developer_guide/development.rst | 2 +- doc/metrics.rst | 2 +- doc/user_guide/getting_started.rst | 21 ++++--- exasol/toolbox/nox/_documentation.py | 2 +- exasol/toolbox/nox/_format.py | 2 +- exasol/toolbox/nox/_lint.py | 8 +-- exasol/toolbox/nox/_metrics.py | 11 ++-- exasol/toolbox/nox/_release.py | 29 +-------- exasol/toolbox/nox/_test.py | 6 +- exasol/toolbox/nox/tasks.py | 59 ++++++++++--------- .../pre_commit_hooks/package_version.py | 2 +- exasol/toolbox/sphinx/multiversion/main.py | 4 +- .../templates/github/workflows/checks.yml | 8 +-- .../templates/github/workflows/report.yml | 4 +- exasol/toolbox/templates/noxfile.py | 2 +- .../toolbox/templates/pre-commit-config.yaml | 6 +- exasol/toolbox/version.py | 2 +- noxfile.py | 2 +- .../{{cookiecutter.package_name}}/version.py | 2 +- .../{{cookiecutter.repo_name}}/noxfile.py | 2 +- 23 files changed, 105 insertions(+), 104 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index e6d198462..992aaed4d 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -59,7 +59,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run lint - run: poetry run nox -s lint + run: poetry run nox -s lint:code - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -87,7 +87,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run type-check - run: poetry run nox -s type-check + run: poetry run nox -s lint:typing Security: name: Security Checks (Python-${{ matrix.python-version }}) @@ -108,7 +108,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run security linter - run: poetry run nox -s security + run: poetry run nox -s lint:security - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -139,7 +139,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run Tests and Collect Coverage - run: poetry run nox -s coverage -- -- --db-version ${{ matrix.exasol-version }} + run: poetry run nox -s test:coverage -- -- --db-version ${{ matrix.exasol-version }} - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 diff --git a/.github/workflows/report.yml b/.github/workflows/report.yml index a4f9f4dff..c8c7b3473 100644 --- a/.github/workflows/report.yml +++ b/.github/workflows/report.yml @@ -35,7 +35,7 @@ jobs: cp security-python3.9/.security.json ../ - name: Generate Report - run: poetry run nox -s report -- -- --format json | tee metrics.json + run: poetry run nox -s project:report -- -- --format json | tee metrics.json - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -46,7 +46,7 @@ jobs: - name: Generate GitHub Summary run: | echo -e "# Summary\n" >> $GITHUB_STEP_SUMMARY - poetry run nox -s report -- -- --format markdown >> $GITHUB_STEP_SUMMARY + poetry run nox -s project:report -- -- --format markdown >> $GITHUB_STEP_SUMMARY echo -e "\n\n# Coverage\n" >> $GITHUB_STEP_SUMMARY poetry run coverage report -- --format markdown >> $GITHUB_STEP_SUMMARY echo -e "\n\n# Static Code Analysis\n" >> $GITHUB_STEP_SUMMARY diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 852ae8304..5ff7b9f57 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -3,10 +3,23 @@ ## 🚨 Breaking Changes * Dropped python 3.8 support -* Changed names of Documentation related nox tasks - - `build-docs` -> `docs:build` - - `open-docs` -> `docs:open` - - `clean-docs` -> `docs:clean` +* Changed names of all nox tasks + + | Old Name | New Name | Description | + |--------------------|------------------------|----------------------------------------------------------------| + | fix | project:fix | Runs all automated fixes on the code base | + | check | project:check | Runs all available checks on the project | + | report | project:report | Collects and generates metrics summary for the workspace | + | unit-tests | test:unit | Runs all unit tests | + | integration-tests | test:integration | Runs all the integration tests | + | coverage | test:coverage | Runs all tests (unit + integration) and reports the code coverage | + | lint | lint:code | Runs the static code analyzer on the project | + | type-check | lint:typing | Runs the type checker on the project | + | security | lint:security | Runs the security linter on the project | + | build-build | docs:build | Builds the project documentation | + | open-open | docs:open | Opens the built project documentation | + | clean-docs | docs:clean | Removes the documentations build folder | + | prepare-release | release:prepare | Prepares the project for a new release | ## ✨ Added diff --git a/doc/developer_guide/development.rst b/doc/developer_guide/development.rst index 184ce55de..c8ff61977 100644 --- a/doc/developer_guide/development.rst +++ b/doc/developer_guide/development.rst @@ -17,7 +17,7 @@ This can be achieved by running the following command: .. code-block:: shell - nox -s prepare-release -- .. + nox -s release:prepare -- .. Replace ``, ``, and `` with the appropriate version numbers. Once the PR is successfully merged, the release can be triggered (see next section). diff --git a/doc/metrics.rst b/doc/metrics.rst index 0308bff6a..9fdb315a4 100644 --- a/doc/metrics.rst +++ b/doc/metrics.rst @@ -84,7 +84,7 @@ Tooling Projects ________ -Projects can run the nox task :code:`nox -s report` to generate their project metrics if they are using the :code:`exasol-toolbox`. +Projects can run the nox task :code:`nox -s project:report` to generate their project metrics if they are using the :code:`exasol-toolbox`. Development diff --git a/doc/user_guide/getting_started.rst b/doc/user_guide/getting_started.rst index f8799e97f..e126d96b6 100644 --- a/doc/user_guide/getting_started.rst +++ b/doc/user_guide/getting_started.rst @@ -77,7 +77,7 @@ Execute the unit tests of the project: .. code-block:: shell - nox -s unit-tests + nox -s test:unit .. _existing: @@ -184,17 +184,20 @@ You are ready to use the toolbox. With *nox -l* you can list all available tasks $ nox -l Sessions defined in /noxfile.py: - * fix -> Runs all automated fixes on the code base - - check -> Runs all available checks on the project - - lint -> Runs the linter on the project - - type-check -> Runs the type checker on the project - - unit-tests -> Runs all unit tests - - integration-tests -> Runs the all integration tests - - coverage -> Runs all tests (unit + integration) and reports the code coverage + * project:fix -> Runs all automated fixes on the code base + - project:check -> Runs all available checks on the project + - project:report -> Collects and generates metrics summary for the workspace + - test:unit -> Runs all unit tests + - test:integration -> Runs the all integration tests + - test:coverage -> Runs all tests (unit + integration) and reports the code coverage + - lint:code -> Runs the static code analyzer on the project + - lint:typing -> Runs the type checker on the project + - lint:security -> Runs the security linter on the project + - docs:multiversion -> Builds the multiversion project documentation - docs:build -> Builds the project documentation - docs:open -> Opens the built project documentation - docs:clean -> Removes the documentations build folder - - report -> Collects and generates a metrics summary for the workspace + - release:prepare -> Prepares the project for a new release. sessions marked with * are selected, sessions marked with - are skipped. diff --git a/exasol/toolbox/nox/_documentation.py b/exasol/toolbox/nox/_documentation.py index 709f3f228..8564f21da 100644 --- a/exasol/toolbox/nox/_documentation.py +++ b/exasol/toolbox/nox/_documentation.py @@ -38,7 +38,7 @@ def _build_multiversion_docs(session: nox.Session, config: Config) -> None: @nox.session(name="docs:multiversion", python=False) def build_multiversion(session: Session) -> None: - """Builds the project documentation""" + """Builds the multiversion project documentation""" _build_multiversion_docs(session, PROJECT_CONFIG) diff --git a/exasol/toolbox/nox/_format.py b/exasol/toolbox/nox/_format.py index d8f95008c..f89cd3b18 100644 --- a/exasol/toolbox/nox/_format.py +++ b/exasol/toolbox/nox/_format.py @@ -33,7 +33,7 @@ def _pyupgrade(session: Session, files: Iterable[str]) -> None: ) -@nox.session(python=False) +@nox.session(name="project:fix", python=False) def fix(session: Session) -> None: """Runs all automated fixes on the code base""" py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] diff --git a/exasol/toolbox/nox/_lint.py b/exasol/toolbox/nox/_lint.py index b7382aae2..ab5f87e2c 100644 --- a/exasol/toolbox/nox/_lint.py +++ b/exasol/toolbox/nox/_lint.py @@ -65,21 +65,21 @@ def _security_lint(session: Session, files: Iterable[str]) -> None: ) -@nox.session(python=False) +@nox.session(name="lint:code", python=False) def lint(session: Session) -> None: - """Runs the linter on the project""" + "Runs the static code analyzer on the project" py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] _pylint(session, py_files) -@nox.session(name="type-check", python=False) +@nox.session(name="lint:typing", python=False) def type_check(session: Session) -> None: """Runs the type checker on the project""" py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] _type_check(session, py_files) -@nox.session(name="security", python=False) +@nox.session(name="lint:security", python=False) def security_lint(session: Session) -> None: """Runs the security linter on the project""" py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] diff --git a/exasol/toolbox/nox/_metrics.py b/exasol/toolbox/nox/_metrics.py index d00ba06ea..b662f8fd3 100644 --- a/exasol/toolbox/nox/_metrics.py +++ b/exasol/toolbox/nox/_metrics.py @@ -13,7 +13,7 @@ from noxconfig import PROJECT_CONFIG -@nox.session(name="report", python=False) +@nox.session(name="project:report", python=False) def report(session: Session) -> None: """ Collects and generates metrics summary for the workspace @@ -28,11 +28,12 @@ def report(session: Session) -> None: * :code:`rm .coverage .lint.txt` * Run the following targets: - - :code:`nox -s coverage` - - :code:`nox -s lint` + - :code:`nox -s test:coverage` + - :code:`nox -s lint:code` + - :code:`nox -s lint:security` """ formats = tuple(fmt.name.lower() for fmt in Format) - usage = "nox -s report -- [options]" + usage = "nox -s project:report -- [options]" parser = argparse.ArgumentParser( description="Generates status report for the project", usage=usage ) @@ -51,7 +52,7 @@ def report(session: Session) -> None: ) if not all(file.exists() for file in required_files): session.error( - "Please make sure you run the `coverage`, `security` and the `lint` target first" + "Please make sure you run the `test:coverage`, `lint:security` and the `lint:code` target first" ) sha1 = str( session.run("git", "rev-parse", "HEAD", external=True, silent=True) diff --git a/exasol/toolbox/nox/_release.py b/exasol/toolbox/nox/_release.py index 424e0a9bf..02d676d70 100644 --- a/exasol/toolbox/nox/_release.py +++ b/exasol/toolbox/nox/_release.py @@ -28,8 +28,8 @@ def _create_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( - prog="nox -s prepare-release", - usage="nox -s prepare-release -- [-h] version", + prog="nox -s release:prepare", + usage="nox -s release:prepare -- [-h] version", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( @@ -89,7 +89,7 @@ def _add_files_to_index(session: Session, files: list[Path]) -> None: session.run("git", "add", f"{file}") -@nox.session(name="prepare-release", python=False) +@nox.session(name="release:prepare", python=False) def prepare_release(session: Session, python=False) -> None: """ Prepares the project for a new release. @@ -146,26 +146,3 @@ def prepare_release(session: Session, python=False) -> None: "--body", '""', ) - - -@nox.session(name="release", python=False) -def release(session: Session, python=False) -> None: - """ - Creates a new release and publishing it to GitHub and pypi. - """ - session.error("Not implemented yet") - # Precondition(s): - # Convert ci-cd.yml workflow to cd.yml workflow - # Tests validation can be skipped. Branch protection together with - # PR and merge validation shoudl be sufficient - # ---------------------------------------------------------------------- - # 0. Check that version isn't released yet (tag does not exist (origin)) - # 0.1. update git information - # 0.2. check if origin does not have the tag yet - # 1. check if current branch is main/master - # 2. build wheel/package - # 3. create release tag - # 4. push release tag to origin - # 5. publish on gh - # 5. publish on pypi - # 6. output relase message/information diff --git a/exasol/toolbox/nox/_test.py b/exasol/toolbox/nox/_test.py index 309638af4..aad1b9209 100644 --- a/exasol/toolbox/nox/_test.py +++ b/exasol/toolbox/nox/_test.py @@ -72,14 +72,14 @@ def _coverage( session.run(*command) -@nox.session(name="unit-tests", python=False) +@nox.session(name="test:unit", python=False) def unit_tests(session: Session) -> None: """Runs all unit tests""" context = _context(session, coverage=False) _unit_tests(session, PROJECT_CONFIG, context) -@nox.session(name="integration-tests", python=False) +@nox.session(name="test:integration", python=False) def integration_tests(session: Session) -> None: """ Runs the all integration tests @@ -93,7 +93,7 @@ def integration_tests(session: Session) -> None: _integration_tests(session, PROJECT_CONFIG, context) -@nox.session(name="coverage", python=False) +@nox.session(name="test:coverage", python=False) def coverage(session: Session) -> None: """Runs all tests (unit + integration) and reports the code coverage""" context = _context(session, coverage=True) diff --git a/exasol/toolbox/nox/tasks.py b/exasol/toolbox/nox/tasks.py index d9cb27d1c..39e96d085 100644 --- a/exasol/toolbox/nox/tasks.py +++ b/exasol/toolbox/nox/tasks.py @@ -16,28 +16,50 @@ ] -import argparse - import nox from nox import Session -from exasol.toolbox.nox._documentation import ( - build_docs, - clean_docs, - open_docs, -) from exasol.toolbox.nox._format import ( _code_format, _pyupgrade, fix, ) + +# fmt: off +# isort: off +from noxconfig import PROJECT_CONFIG + + +@nox.session(name="project:check", python=False) +def check(session: Session) -> None: + """Runs all available checks on the project""" + context = _context(session, coverage=True) + py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] + _version(session, Mode.Check, PROJECT_CONFIG.version_file) + _pyupgrade(session, py_files) + _code_format(session, Mode.Check, py_files) + _pylint(session, py_files) + _type_check(session, py_files) + _coverage(session, PROJECT_CONFIG, context) + +from exasol.toolbox.nox._metrics import report +from exasol.toolbox.nox._test import ( + _coverage, + coverage, + integration_tests, + unit_tests, +) from exasol.toolbox.nox._lint import ( _pylint, _type_check, lint, type_check, ) -from exasol.toolbox.nox._metrics import report +from exasol.toolbox.nox._documentation import ( + build_docs, + clean_docs, + open_docs, +) from exasol.toolbox.nox._release import prepare_release from exasol.toolbox.nox._shared import ( Mode, @@ -45,23 +67,6 @@ _version, python_files, ) -from exasol.toolbox.nox._test import ( - _coverage, - coverage, - integration_tests, - unit_tests, -) -from noxconfig import PROJECT_CONFIG - -@nox.session(name="check", python=False) -def check(session: Session) -> None: - """Runs all available checks on the project""" - context = _context(session, coverage=True) - py_files = [f"{file}" for file in python_files(PROJECT_CONFIG.root)] - _version(session, Mode.Check, PROJECT_CONFIG.version_file) - _pyupgrade(session, py_files) - _code_format(session, Mode.Check, py_files) - _pylint(session, py_files) - _type_check(session, py_files) - _coverage(session, PROJECT_CONFIG, context) +# isort: on +# fmt: on diff --git a/exasol/toolbox/pre_commit_hooks/package_version.py b/exasol/toolbox/pre_commit_hooks/package_version.py index 3f6f68edf..9be9fc24b 100644 --- a/exasol/toolbox/pre_commit_hooks/package_version.py +++ b/exasol/toolbox/pre_commit_hooks/package_version.py @@ -24,7 +24,7 @@ _VERSION_MODULE_TEMPLATE = cleandoc(''' # ATTENTION: # This file is generated by exasol/toolbox/pre_commit_hooks/package_version.py when using: - # * either "poetry run nox -s fix" + # * either "poetry run nox -s project:fix" # * or "poetry run version-check --fix" # Do not edit this file manually! # If you need to change the version, do so in the project.toml, e.g. by using `poetry version X.Y.Z`. diff --git a/exasol/toolbox/sphinx/multiversion/main.py b/exasol/toolbox/sphinx/multiversion/main.py index 4d94c68ca..31e48ba41 100644 --- a/exasol/toolbox/sphinx/multiversion/main.py +++ b/exasol/toolbox/sphinx/multiversion/main.py @@ -575,7 +575,9 @@ def _main(args, argv): os.path.join(args.outputdir, "index.html"), "w", encoding="utf-8" ) as f: versions = [ - ref.name for ref in gitrefs if re.match(config.smv_tag_whitelist, ref.name) + ref.name + for ref in gitrefs + if re.match(config.smv_tag_whitelist, ref.name) ] versions = sorted( versions, key=lambda v: ExasolVersion.from_string(v), reverse=True diff --git a/exasol/toolbox/templates/github/workflows/checks.yml b/exasol/toolbox/templates/github/workflows/checks.yml index fea1ed128..4d0d88eb4 100644 --- a/exasol/toolbox/templates/github/workflows/checks.yml +++ b/exasol/toolbox/templates/github/workflows/checks.yml @@ -65,7 +65,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run lint - run: poetry run nox -s lint + run: poetry run nox -s lint:code - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -93,7 +93,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run type-check - run: poetry run nox -s type-check + run: poetry run nox -s lint:typing Security: name: Security Checks (Python-${{ matrix.python-version }}) @@ -114,7 +114,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run security linter - run: poetry run nox -s security + run: poetry run nox -s lint:security - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -145,7 +145,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run Tests and Compute Coverage - run: poetry run nox -s coverage -- -- --db-version ${{ matrix.exasol-version }} + run: poetry run nox -s test:coverage -- -- --db-version ${{ matrix.exasol-version }} - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 diff --git a/exasol/toolbox/templates/github/workflows/report.yml b/exasol/toolbox/templates/github/workflows/report.yml index 7ed496294..5a6787dcc 100644 --- a/exasol/toolbox/templates/github/workflows/report.yml +++ b/exasol/toolbox/templates/github/workflows/report.yml @@ -35,7 +35,7 @@ jobs: cp security-python3.9/.security.json ../ - name: Generate Report - run: poetry run nox -s report -- -- --format json | tee metrics.json + run: poetry run nox -s project:report -- -- --format json | tee metrics.json - name: Upload Artifacts uses: actions/upload-artifact@v4.4.0 @@ -46,7 +46,7 @@ jobs: - name: Generate GitHub Summary run: | echo -e "# Summary\n" >> $GITHUB_STEP_SUMMARY - poetry run nox -s report -- -- --format markdown >> $GITHUB_STEP_SUMMARY + poetry run nox -s project:report -- -- --format markdown >> $GITHUB_STEP_SUMMARY echo -e "\n\n# Coverage\n" >> $GITHUB_STEP_SUMMARY poetry run coverage report -- --format markdown >> $GITHUB_STEP_SUMMARY echo -e "\n\n# Static Code Analysis\n" >> $GITHUB_STEP_SUMMARY diff --git a/exasol/toolbox/templates/noxfile.py b/exasol/toolbox/templates/noxfile.py index 35b74f41c..176dbf97b 100644 --- a/exasol/toolbox/templates/noxfile.py +++ b/exasol/toolbox/templates/noxfile.py @@ -4,4 +4,4 @@ from exasol.toolbox.nox.tasks import * # default actions to be run if nothing is explicitly specified with the -s option -nox.options.sessions = ["fix"] +nox.options.sessions = ["project:fix"] diff --git a/exasol/toolbox/templates/pre-commit-config.yaml b/exasol/toolbox/templates/pre-commit-config.yaml index 017e6b828..3b9da5ac6 100644 --- a/exasol/toolbox/templates/pre-commit-config.yaml +++ b/exasol/toolbox/templates/pre-commit-config.yaml @@ -8,7 +8,7 @@ repos: types: [ python ] pass_filenames: false language: system - entry: poetry run nox -s fix + entry: poetry run nox -s project:fix - repo: local hooks: @@ -17,7 +17,7 @@ repos: types: [ python ] pass_filenames: false language: system - entry: poetry run nox -s type-check + entry: poetry run nox -s lint:typing - repo: local hooks: @@ -26,7 +26,7 @@ repos: types: [ python ] pass_filenames: false language: system - entry: poetry run nox -s lint + entry: poetry run nox -s lint:code - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 diff --git a/exasol/toolbox/version.py b/exasol/toolbox/version.py index 56fcadef4..cda7f8a58 100644 --- a/exasol/toolbox/version.py +++ b/exasol/toolbox/version.py @@ -1,6 +1,6 @@ # ATTENTION: # This file is generated by exasol/toolbox/pre_commit_hooks/package_version.py when using: -# * either "poetry run nox -s fix" +# * either "poetry run nox -s project:fix" # * or "poetry run version-check --fix" # Do not edit this file manually! # If you need to change the version, do so in the project.toml, e.g. by using `poetry version X.Y.Z`. diff --git a/noxfile.py b/noxfile.py index fb579dbe4..b67ac16a7 100644 --- a/noxfile.py +++ b/noxfile.py @@ -6,7 +6,7 @@ from exasol.toolbox.nox.tasks import * # pylint: disable=wildcard-import disable=unused-wildcard-import # default actions to be run if nothing is explicitly specified with the -s option -nox.options.sessions = ["fix"] +nox.options.sessions = ["project:fix"] # entry point for debugging diff --git a/project-template/{{cookiecutter.repo_name}}/exasol/{{cookiecutter.package_name}}/version.py b/project-template/{{cookiecutter.repo_name}}/exasol/{{cookiecutter.package_name}}/version.py index 9da996321..c98b7d063 100644 --- a/project-template/{{cookiecutter.repo_name}}/exasol/{{cookiecutter.package_name}}/version.py +++ b/project-template/{{cookiecutter.repo_name}}/exasol/{{cookiecutter.package_name}}/version.py @@ -1,6 +1,6 @@ # ATTENTION: # This file is generated by exasol/toolbox/pre_commit_hooks/package_version.py when using: -# * either "poetry run nox -s fix" +# * either "poetry run nox -s project:fix" # * or "poetry run version-check --fix" # Do not edit this file manually! # If you need to change the version, do so in the project.toml, e.g. by using `poetry version X.Y.Z`. diff --git a/project-template/{{cookiecutter.repo_name}}/noxfile.py b/project-template/{{cookiecutter.repo_name}}/noxfile.py index 35b74f41c..176dbf97b 100644 --- a/project-template/{{cookiecutter.repo_name}}/noxfile.py +++ b/project-template/{{cookiecutter.repo_name}}/noxfile.py @@ -4,4 +4,4 @@ from exasol.toolbox.nox.tasks import * # default actions to be run if nothing is explicitly specified with the -s option -nox.options.sessions = ["fix"] +nox.options.sessions = ["project:fix"] From 9876aa8c573f5de0882e8cc9060d67d75d575a9e Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 15 Nov 2024 08:51:23 +0100 Subject: [PATCH 10/10] Prepare release 0.16.0 (#276) --- doc/changes/changelog.md | 2 + doc/changes/changes_0.16.0.md | 42 +++++++++++++++++++ doc/changes/unreleased.md | 42 ------------------- .../github/workflows/build-and-publish.yml | 2 +- .../github/workflows/check-release-tag.yml | 2 +- .../templates/github/workflows/checks.yml | 12 +++--- .../templates/github/workflows/gh-pages.yml | 2 +- .../templates/github/workflows/report.yml | 2 +- exasol/toolbox/version.py | 2 +- pyproject.toml | 2 +- 10 files changed, 56 insertions(+), 54 deletions(-) create mode 100644 doc/changes/changes_0.16.0.md diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index b259b7e3a..c5ce97147 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,6 +1,7 @@ # Changelog * [unreleased](unreleased.md) +* [0.16.0](changes_0.16.0.md) * [0.15.0](changes_0.15.0.md) * [0.14.0](changes_0.14.0.md) * [0.13.0](changes_0.13.0.md) @@ -24,6 +25,7 @@ hidden: --- unreleased +changes_0.16.0 changes_0.15.0 changes_0.14.0 changes_0.13.0 diff --git a/doc/changes/changes_0.16.0.md b/doc/changes/changes_0.16.0.md new file mode 100644 index 000000000..b16594165 --- /dev/null +++ b/doc/changes/changes_0.16.0.md @@ -0,0 +1,42 @@ +# 0.16.0 - 2024-11-15 + +## 🚨 Breaking Changes + +* Dropped python 3.8 support +* Changed names of all nox tasks + + | Old Name | New Name | Description | + |--------------------|------------------------|----------------------------------------------------------------| + | fix | project:fix | Runs all automated fixes on the code base | + | check | project:check | Runs all available checks on the project | + | report | project:report | Collects and generates metrics summary for the workspace | + | unit-tests | test:unit | Runs all unit tests | + | integration-tests | test:integration | Runs all the integration tests | + | coverage | test:coverage | Runs all tests (unit + integration) and reports the code coverage | + | lint | lint:code | Runs the static code analyzer on the project | + | type-check | lint:typing | Runs the type checker on the project | + | security | lint:security | Runs the security linter on the project | + | build-build | docs:build | Builds the project documentation | + | open-open | docs:open | Opens the built project documentation | + | clean-docs | docs:clean | Removes the documentations build folder | + | prepare-release | release:prepare | Prepares the project for a new release | + +## ✨ Added + +* Added support for multi version Documentation +* Added nox tasks for building multi-version documentation + +## 🐞 Fixed + +* Fixed CD workflow template +* Fixed the selection of the latest version in Multi-Version Documentation + +## 📚 Documentation + +* Added Documentation on Metrics +* Added additional details regarding adjusted sphinx-multiversion +* Restructured documentation + +## 🔩 Internal + +* Relocked dependencies \ No newline at end of file diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 5ff7b9f57..79e701b84 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -1,43 +1 @@ # Unreleased - -## 🚨 Breaking Changes - -* Dropped python 3.8 support -* Changed names of all nox tasks - - | Old Name | New Name | Description | - |--------------------|------------------------|----------------------------------------------------------------| - | fix | project:fix | Runs all automated fixes on the code base | - | check | project:check | Runs all available checks on the project | - | report | project:report | Collects and generates metrics summary for the workspace | - | unit-tests | test:unit | Runs all unit tests | - | integration-tests | test:integration | Runs all the integration tests | - | coverage | test:coverage | Runs all tests (unit + integration) and reports the code coverage | - | lint | lint:code | Runs the static code analyzer on the project | - | type-check | lint:typing | Runs the type checker on the project | - | security | lint:security | Runs the security linter on the project | - | build-build | docs:build | Builds the project documentation | - | open-open | docs:open | Opens the built project documentation | - | clean-docs | docs:clean | Removes the documentations build folder | - | prepare-release | release:prepare | Prepares the project for a new release | - -## ✨ Added - -* Added support for multi version Documentation -* Added nox tasks for building multi-version documentation - -## 🐞 Fixed - -* Fixed CD workflow template -* Fixed the selection of the latest version in Multi-Version Documentation - -## 📚 Documentation - -* Added Documentation on Metrics -* Added additional details regarding adjusted sphinx-multiversion -* Restructured documentation - -## 🔩 Internal - -* Relocked dependencies - diff --git a/exasol/toolbox/templates/github/workflows/build-and-publish.yml b/exasol/toolbox/templates/github/workflows/build-and-publish.yml index 57b414b42..189951d11 100644 --- a/exasol/toolbox/templates/github/workflows/build-and-publish.yml +++ b/exasol/toolbox/templates/github/workflows/build-and-publish.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Build Artifacts run: poetry build diff --git a/exasol/toolbox/templates/github/workflows/check-release-tag.yml b/exasol/toolbox/templates/github/workflows/check-release-tag.yml index 1afdbab3d..4fbfc9005 100644 --- a/exasol/toolbox/templates/github/workflows/check-release-tag.yml +++ b/exasol/toolbox/templates/github/workflows/check-release-tag.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Check Tag Version # make sure the pushed/created tag matched the project version diff --git a/exasol/toolbox/templates/github/workflows/checks.yml b/exasol/toolbox/templates/github/workflows/checks.yml index 4d0d88eb4..a27d06bea 100644 --- a/exasol/toolbox/templates/github/workflows/checks.yml +++ b/exasol/toolbox/templates/github/workflows/checks.yml @@ -19,7 +19,7 @@ jobs: fetch-depth: 0 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Check Version(s) run: poetry run version-check `poetry run python -c "from noxconfig import PROJECT_CONFIG; print(PROJECT_CONFIG.version_file)"` @@ -40,7 +40,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Build Documentation run: | @@ -60,7 +60,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 with: python-version: ${{ matrix.python-version }} @@ -88,7 +88,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 with: python-version: ${{ matrix.python-version }} @@ -109,7 +109,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 with: python-version: ${{ matrix.python-version }} @@ -140,7 +140,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 with: python-version: ${{ matrix.python-version }} diff --git a/exasol/toolbox/templates/github/workflows/gh-pages.yml b/exasol/toolbox/templates/github/workflows/gh-pages.yml index ec74a7d4d..7336bf9d1 100644 --- a/exasol/toolbox/templates/github/workflows/gh-pages.yml +++ b/exasol/toolbox/templates/github/workflows/gh-pages.yml @@ -14,7 +14,7 @@ jobs: fetch-depth: 0 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Build Documentation run: | diff --git a/exasol/toolbox/templates/github/workflows/report.yml b/exasol/toolbox/templates/github/workflows/report.yml index 5a6787dcc..177cc044b 100644 --- a/exasol/toolbox/templates/github/workflows/report.yml +++ b/exasol/toolbox/templates/github/workflows/report.yml @@ -20,7 +20,7 @@ jobs: fetch-depth: 0 - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.15.0 + uses: exasol/python-toolbox/.github/actions/python-environment@0.16.0 - name: Download Artifacts uses: actions/download-artifact@v4.1.8 diff --git a/exasol/toolbox/version.py b/exasol/toolbox/version.py index cda7f8a58..b6a74c248 100644 --- a/exasol/toolbox/version.py +++ b/exasol/toolbox/version.py @@ -5,6 +5,6 @@ # Do not edit this file manually! # If you need to change the version, do so in the project.toml, e.g. by using `poetry version X.Y.Z`. MAJOR = 0 -MINOR = 15 +MINOR = 16 PATCH = 0 VERSION = f"{MAJOR}.{MINOR}.{PATCH}" diff --git a/pyproject.toml b/pyproject.toml index c738d8863..523c6221b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "exasol-toolbox" packages = [ { include = "exasol" }, ] -version = "0.15.0" +version = "0.16.0" description = "Your one-stop solution for managing all standard tasks and core workflows of your Python project." authors = [ "Nicola Coretti "