From 16d8d3a904d0dd25564fa4a427d0d3b3e7cd9c3d Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 17 May 2024 14:19:30 +0200 Subject: [PATCH] Update dependencies 2024-05-16 and Python-Toolbox (#134) --- .github/workflows/build-and-publish.yml | 38 ++ .github/workflows/check-release-tag.yml | 21 ++ .github/workflows/checks.yml | 114 ++++++ .github/workflows/ci-cd.yml | 14 +- .github/workflows/ci.yml | 6 +- .github/workflows/gh-pages.yml | 27 ++ .../workflows/{pr_merge.yml => pr-merge.yml} | 13 +- .github/workflows/report.yml | 53 +++ doc/changes/unreleased.md | 6 +- doc/developer_guide/developer_guide.rst | 38 +- noxconfig.py | 43 ++- poetry.lock | 332 +++++++++++++----- pyproject.toml | 6 +- 13 files changed, 570 insertions(+), 141 deletions(-) create mode 100644 .github/workflows/build-and-publish.yml create mode 100644 .github/workflows/check-release-tag.yml create mode 100644 .github/workflows/checks.yml create mode 100644 .github/workflows/gh-pages.yml rename .github/workflows/{pr_merge.yml => pr-merge.yml} (87%) create mode 100644 .github/workflows/report.yml diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml new file mode 100644 index 00000000..7cdd1518 --- /dev/null +++ b/.github/workflows/build-and-publish.yml @@ -0,0 +1,38 @@ +name: Build & Publish + +on: + workflow_call: + secrets: + PYPI_TOKEN: + required: true + +jobs: + + cd-job: + name: Continues Delivery + runs-on: ubuntu-latest + steps: + + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Build Artifacts + run: poetry build + + - name: PyPi Release + env: + POETRY_HTTP_BASIC_PYPI_USERNAME: "__token__" + POETRY_HTTP_BASIC_PYPI_PASSWORD: "${{ secrets.PYPI_TOKEN }}" + run: poetry publish + + - name: GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: > + gh release create ${GITHUB_REF_NAME} + --title ${GITHUB_REF_NAME} + --notes-file ./doc/changes/changes_${GITHUB_REF_NAME}.md + dist/* diff --git a/.github/workflows/check-release-tag.yml b/.github/workflows/check-release-tag.yml new file mode 100644 index 00000000..a3cc7142 --- /dev/null +++ b/.github/workflows/check-release-tag.yml @@ -0,0 +1,21 @@ +name: Check Release Tag + +on: workflow_call + +jobs: + + check-tag-version-job: + + name: Check Tag Version + runs-on: ubuntu-latest + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Check Tag Version + # make sure the pushed/created tag matched the project version + run: "[[ `poetry version --short` == ${{ github.ref_name }} ]]" diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 00000000..b104ebbb --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,114 @@ +name: Checks + +on: workflow_call + +jobs: + + version-check-job: + name: Version Check + runs-on: ubuntu-latest + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Check Version(s) + run: poetry run version-check exasol/bucketfs/version.py + + build-documentation-job: + name: Build Documentation + needs: [version-check-job] + runs-on: ubuntu-latest + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Build Documentation + run: | + poetry run python -m nox -s build-docs + + lint-job: + name: Linting (Python-${{ matrix.python-version }}) + needs: [version-check-job] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11"] + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Run Tests + run: poetry run nox -s lint + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: .lint.txt + path: .lint.txt + + type-check-job: + name: Type Checking (Python-${{ matrix.python-version }}) + needs: [version-check-job] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11"] + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Run Tests + run: poetry run nox -s type-check + + tests-job: + name: Tests (Python-${{ matrix.python-version }}, Exasol-${{ matrix.exasol-version}}) + needs: [build-documentation-job, lint-job, type-check-job] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11"] + exasol-version: ["7.1.9"] + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Run Tests + run: poetry run nox -s coverage -- -- --db-version ${{ matrix.exasol-version }} + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: .coverage + path: .coverage + diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index ed4c7dc5..e4c8ed52 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -9,12 +9,12 @@ jobs: check-tag-version-job: name: Check Release Tag - uses: exasol/python-toolbox/.github/workflows/check-release-tag.yml@0.3.0 + uses: ./.github/workflows/check-release-tag.yml ci-job: name: Checks needs: [ check-tag-version-job ] - uses: exasol/python-toolbox/.github/workflows/checks.yml@0.3.0 + uses: ./.github/workflows/checks.yml tests-job: name: Tests (Python-${{ matrix.python-version }}) @@ -48,8 +48,12 @@ jobs: run: poetry run pytest tests cd-job: - name: Continues Delivery - needs: [ ci-job, tests-job ] - uses: exasol/python-toolbox/.github/workflows/build-and-publish.yml@0.3.0 + name: Continuous Delivery + needs: [ ci-job ] + uses: ./.github/workflows/build-and-publish.yml secrets: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + + metrics: + needs: [ ci-job ] + uses: ./.github/workflows/report.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 900f29ae..53ecb630 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: ci-job: name: Checks - uses: exasol/python-toolbox/.github/workflows/checks.yml@0.3.0 + uses: ./.github/workflows/checks.yml tests-job: name: Tests (Python-${{ matrix.python-version }}) @@ -64,3 +64,7 @@ jobs: SAAS_PAT: ${{ secrets.INTEGRATION_TEAM_SAAS_STAGING_PAT }} run: poetry run pytest test_saas + + metrics: + needs: [ ci-job ] + uses: ./.github/workflows/report.yml diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 00000000..0fe591b9 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,27 @@ +name: Publish Documentation + +on: workflow_call + +jobs: + + documentation-job: + runs-on: ubuntu-latest + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Build Documentation + run: | + poetry run python -m nox -s build-docs + + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4.6.0 + with: + branch: gh-pages + folder: .html-documentation + git-config-name: Github Action + git-config-email: opensource@exasol.com diff --git a/.github/workflows/pr_merge.yml b/.github/workflows/pr-merge.yml similarity index 87% rename from .github/workflows/pr_merge.yml rename to .github/workflows/pr-merge.yml index 406b8ac0..c63d6397 100644 --- a/.github/workflows/pr_merge.yml +++ b/.github/workflows/pr-merge.yml @@ -10,7 +10,15 @@ jobs: ci-job: name: Checks - uses: exasol/python-toolbox/.github/workflows/checks.yml@0.3.0 + uses: ./.github/workflows/checks.yml + + publish-docs: + name: Publish Documentation + uses: ./.github/workflows/gh-pages.yml + + metrics: + needs: [ ci-job ] + uses: ./.github/workflows/report.yml tests-job: name: Tests (Python-${{ matrix.python-version }}) @@ -43,6 +51,3 @@ jobs: - name: Run Tests run: poetry run pytest tests - publish-docs: - name: Publish Documentation - uses: exasol/python-toolbox/.github/workflows/gh-pages.yml@0.3.0 diff --git a/.github/workflows/report.yml b/.github/workflows/report.yml new file mode 100644 index 00000000..4a006e87 --- /dev/null +++ b/.github/workflows/report.yml @@ -0,0 +1,53 @@ +name: Status Report + +on: + workflow_call: + secrets: + ALTERNATIVE_GITHUB_TOKEN: + required: false + +jobs: + + report: + name: Generate Status Report + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.ALTERNATIVE_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + + steps: + - name: SCM Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.12.0 + + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + path: ./artifacts + + - name: Copy Artifacts into Root Folder + working-directory: ./artifacts + run: | + cp .coverage/.coverage ../ + cp .lint.txt/.lint.txt ../ + + - name: Generate Report + run: poetry run nox -s report -- -- --format json | tee metrics.json + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: metrics.json + path: metrics.json + + - name: Generate GitHub Summary + run: | + echo -e "# Summary\n" >> $GITHUB_STEP_SUMMARY + poetry run nox -s 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 + cat .lint.txt >> $GITHUB_STEP_SUMMARY diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 1e3761d4..297bcc84 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -1 +1,5 @@ -# Unreleased \ No newline at end of file +# Unreleased + +## Internal +- Updated lockfile +- Update workflows to align with used exasol-toolbox version (0.12.0) diff --git a/doc/developer_guide/developer_guide.rst b/doc/developer_guide/developer_guide.rst index c41d7839..a3bbc1e4 100644 --- a/doc/developer_guide/developer_guide.rst +++ b/doc/developer_guide/developer_guide.rst @@ -28,36 +28,47 @@ Setup pre-commit hook(s) Creating a Release ******************* -Prerequisites -------------- +Prepare the Release +------------------- -* Change log needs to be up to date -* Latest change log version needs to match project and package version -* Release tag needs to match package, changelog and project version +To prepare for a release, a pull request with the following parameters needs to be created: - For Example: - * Tag: 0.4.0 - * Changelog: changes_0.4.0.md - * \`poetry version -s\`: 0.4.0 +- Updated version numbers +- Updated the changelog +- Updated workflow templates (not automated yet) + +This can be achieved by running the following command: + +.. code-block:: shell + + nox -s prepare-release -- .. + +Replace ``, ``, and `` with the appropriate version numbers. +Once the PR is successfully merged, the release can be triggered (see next section). Triggering the Release ---------------------- -In order to trigger a release a new tag must be pushed to Github. -For further details see: `.github/workflows/ci-cd.yml`. +.. warning:: -#. Create a local tag with the appropriate version number + Before creating a tag for a release, make sure you have pulled in the latest changes + from **master/main** (:code:`git pull`). + +To trigger a release, a new tag must be pushed to GitHub. For further details, see `.github/workflows/ci-cd.yml`. + +1. Create a local tag with the appropriate version number: .. code-block:: shell git tag x.y.z -#. Push the tag to Github +2. Push the tag to GitHub: .. code-block:: shell git push origin x.y.z + What to do if the release failed? --------------------------------- @@ -90,3 +101,4 @@ One of the release steps failed (Partial Release) **Scenario**: Publishing of the release on Github was successfully but during the PyPi release, the upload step got interrupted. **Solution**: Manually push the package to PyPi + diff --git a/noxconfig.py b/noxconfig.py index deb4a2a9..9d3a92c8 100644 --- a/noxconfig.py +++ b/noxconfig.py @@ -9,25 +9,13 @@ MutableMapping, ) +from exasol.toolbox.nox.plugin import hookimpl from nox import Session -@dataclass(frozen=True) -class Config: - root: Path = Path(__file__).parent - doc: Path = Path(__file__).parent / "doc" - version_file: Path = Path(__file__).parent / "exasol" / "bucketfs" / "version.py" - path_filters: Iterable[str] = ( - "dist", - ".eggs", - "venv", - ) - - @staticmethod - def pre_integration_tests_hook( - session: Session, _config: Config, _context: MutableMapping[str, Any] - ) -> bool: - """Implement if project specific behaviour is required""" +class IntegrationTestsPlugin: + @hookimpl + def pre_integration_tests_hook(self, session, config, context): with TemporaryDirectory() as tmp_dir: tmp_dir = Path(tmp_dir) checkout_name = "ITDE" @@ -51,15 +39,24 @@ def pre_integration_tests_hook( "--db-mem-size", "4GB", ) - return True - @staticmethod - def post_integration_tests_hook( - session: Session, _config: Config, _context: MutableMapping[str, Any] - ) -> bool: - """Implement if project specific behaviour is required""" + @hookimpl + def post_integration_tests_hook(self, session, config, context): session.run("docker", "kill", "db_container_test", external=True) - return True + + +@dataclass(frozen=True) +class Config: + root: Path = Path(__file__).parent + doc: Path = Path(__file__).parent / "doc" + version_file: Path = Path(__file__).parent / "exasol" / "bucketfs" / "version.py" + path_filters: Iterable[str] = ( + "dist", + ".eggs", + "venv", + ) + + plugins = [IntegrationTestsPlugin] PROJECT_CONFIG = Config() diff --git a/poetry.lock b/poetry.lock index 1235ead1..f38d1fee 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -15,6 +16,7 @@ files = [ name = "anyio" version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -35,28 +37,29 @@ trio = ["trio (>=0.23)"] [[package]] name = "argcomplete" -version = "2.1.2" +version = "3.3.0" description = "Bash tab completion for argparse" +category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "argcomplete-2.1.2-py3-none-any.whl", hash = "sha256:4ba9cdaa28c361d251edce884cd50b4b1215d65cdc881bd204426cdde9f52731"}, - {file = "argcomplete-2.1.2.tar.gz", hash = "sha256:fc82ef070c607b1559b5c720529d63b54d9dcf2dcfc2632b10e6372314a34457"}, + {file = "argcomplete-3.3.0-py3-none-any.whl", hash = "sha256:c168c3723482c031df3c207d4ba8fa702717ccb9fc0bfe4117166c1f537b4a54"}, + {file = "argcomplete-3.3.0.tar.gz", hash = "sha256:fd03ff4a5b9e6580569d34b273f741e85cd9e072f3feeeee3eba4891c70eda62"}, ] [package.extras] -lint = ["flake8", "mypy"] -test = ["coverage", "flake8", "mypy", "pexpect", "wheel"] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "astroid" -version = "3.2.0" +version = "3.2.1" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ - {file = "astroid-3.2.0-py3-none-any.whl", hash = "sha256:16ee8ca5c75ac828783028cc1f967777f0e507c6886a295ad143e0f405b975a2"}, - {file = "astroid-3.2.0.tar.gz", hash = "sha256:f7f829f8506ade59f1b3c6c93d8fac5b1ebc721685fa9af23e9794daf1d450a3"}, + {file = "astroid-3.2.1-py3-none-any.whl", hash = "sha256:b452064132234819f023b94f4bd045b250ea0009f372b4377cfcd87f10806ca5"}, + {file = "astroid-3.2.1.tar.gz", hash = "sha256:902564b36796ba1eab3ad2c7a694861fbd926f574d5dbb5fa1d86778a2ba2d91"}, ] [package.dependencies] @@ -66,6 +69,7 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -85,6 +89,7 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p name = "babel" version = "2.15.0" description = "Internationalization utilities" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -102,6 +107,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "beautifulsoup4" version = "4.12.3" description = "Screen-scraping library" +category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -123,6 +129,7 @@ lxml = ["lxml"] name = "black" version = "23.12.1" description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -169,6 +176,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -180,6 +188,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -244,6 +253,7 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -255,6 +265,7 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -354,6 +365,7 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -368,6 +380,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -379,6 +392,7 @@ files = [ name = "colorlog" version = "6.8.2" description = "Add colours to the output of Python's logging module." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -396,6 +410,7 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] name = "coverage" version = "7.5.1" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -460,6 +475,7 @@ toml = ["tomli"] name = "cryptography" version = "42.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -514,6 +530,7 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -529,6 +546,7 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "distlib" version = "0.3.8" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -540,6 +558,7 @@ files = [ name = "docutils" version = "0.19" description = "Docutils -- Python Documentation Utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -549,13 +568,14 @@ files = [ [[package]] name = "exasol-saas-api" -version = "0.4.0" +version = "0.5.0" description = "API enabling Python applications connecting to Exasol database SaaS instances and using their SaaS services" +category = "main" optional = false python-versions = "<4.0,>=3.8.0" files = [ - {file = "exasol_saas_api-0.4.0-py3-none-any.whl", hash = "sha256:c4a6d56bbc2b21fbb9df6c2a589e330c491104c092f462553e59b04a7968200c"}, - {file = "exasol_saas_api-0.4.0.tar.gz", hash = "sha256:959569a276ea7a79a15327d447fdc402b73a105c7487ab282cd4a2978d772298"}, + {file = "exasol_saas_api-0.5.0-py3-none-any.whl", hash = "sha256:a2b81ad4100dc6d2f0f8dc6d0e2b18a0f67d04c3f7d2eb117e8038fe9db87eee"}, + {file = "exasol_saas_api-0.5.0.tar.gz", hash = "sha256:164f31c23fc54ddda18b0a881880b91cff6cd07926f73c154a9b8f44f4cf9575"}, ] [package.dependencies] @@ -569,36 +589,42 @@ types-requests = ">=2.31.0.6,<3.0.0.0" [[package]] name = "exasol-toolbox" -version = "0.8.0" +version = "0.12.0" description = "" +category = "dev" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "exasol_toolbox-0.8.0-py3-none-any.whl", hash = "sha256:519c9d738df097d52ef82ab9631dd5dd29d94c82ee46114e4603e9ae0bab8afc"}, - {file = "exasol_toolbox-0.8.0.tar.gz", hash = "sha256:6a4c5427e5bd972c5b70b9f5dbb0f50768065959a4905e4a9b09355ce1361042"}, + {file = "exasol_toolbox-0.12.0-py3-none-any.whl", hash = "sha256:663ef58c6cebab202ec180159564bac903b99d5d373f42149e5b990e2a390c8e"}, + {file = "exasol_toolbox-0.12.0.tar.gz", hash = "sha256:1529bf533d1f4ae7288d750b91dfabe8aaf0dcd6c7919540259780caef2b4794"}, ] [package.dependencies] black = ">=23.1.0,<24.0.0" coverage = ">=6.4.4,<8.0.0" -furo = ">=2022.9.15,<2023.0.0" +furo = ">=2022.9.15" importlib-resources = ">=5.12.0" isort = ">=5.12.0,<6.0.0" mypy = ">=0.971" -nox = ">=2022.8.7,<2023.0.0" +myst-parser = ">=2.0.0,<4" +nox = ">=2022.8.7" +pluggy = ">=1.5.0,<2.0.0" pre-commit = ">=3.1.1,<4.0.0" -prysk = ">=0.15.1" +prysk = {version = ">=0.17.0,<0.18.0", extras = ["pytest-plugin"]} pylint = ">=2.15.4" pytest = ">=7.2.2,<8.0.0" pyupgrade = ">=2.38.2,<4.0.0" +shibuya = ">=2024.5.14,<2025.0.0" sphinx = ">=5.3,<7.0" sphinx-copybutton = ">=0.5.0,<0.6.0" +sphinx-design = ">=0.5.0,<0.6.0" typer = {version = ">=0.7.0", extras = ["all"]} [[package]] name = "exasol-udf-mock-python" version = "0.1.0" description = "Mocking framework for Exasol Python UDFs" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -615,6 +641,7 @@ pandas = ">=1.4,<2.0" name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -629,6 +656,7 @@ test = ["pytest (>=6)"] name = "filelock" version = "3.14.0" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -643,25 +671,27 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "furo" -version = "2022.12.7" +version = "2024.5.6" description = "A clean customisable Sphinx documentation theme." +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "furo-2022.12.7-py3-none-any.whl", hash = "sha256:7cb76c12a25ef65db85ab0743df907573d03027a33631f17d267e598ebb191f7"}, - {file = "furo-2022.12.7.tar.gz", hash = "sha256:d8008f8efbe7587a97ba533c8b2df1f9c21ee9b3e5cad0d27f61193d38b1a986"}, + {file = "furo-2024.5.6-py3-none-any.whl", hash = "sha256:490a00d08c0a37ecc90de03ae9227e8eb5d6f7f750edf9807f398a2bdf2358de"}, + {file = "furo-2024.5.6.tar.gz", hash = "sha256:81f205a6605ebccbb883350432b4831c0196dd3d1bc92f61e1f459045b3d2b0b"}, ] [package.dependencies] beautifulsoup4 = "*" pygments = ">=2.7" -sphinx = ">=5.0,<7.0" -sphinx-basic-ng = "*" +sphinx = ">=6.0,<8.0" +sphinx-basic-ng = ">=1.0.0.beta2" [[package]] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -673,6 +703,7 @@ files = [ name = "httpcore" version = "1.0.5" description = "A minimal low-level HTTP client." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -687,13 +718,14 @@ h11 = ">=0.13,<0.15" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" version = "0.27.0" description = "The next generation HTTP client." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -704,20 +736,21 @@ files = [ [package.dependencies] anyio = "*" certifi = "*" -httpcore = "==1.*" +httpcore = ">=1.0.0,<2.0.0" idna = "*" sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] [[package]] name = "identify" version = "2.5.36" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -732,6 +765,7 @@ license = ["ukkonen"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -743,6 +777,7 @@ files = [ name = "ifaddr" version = "0.2.0" description = "Cross-platform network interface and IP address enumeration library" +category = "main" optional = false python-versions = "*" files = [ @@ -754,6 +789,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -765,6 +801,7 @@ files = [ name = "importlib-metadata" version = "7.1.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -784,6 +821,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", name = "importlib-resources" version = "6.4.0" description = "Read resources from Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -802,6 +840,7 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -813,6 +852,7 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -827,6 +867,7 @@ colors = ["colorama (>=0.4.6)"] name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -844,6 +885,7 @@ i18n = ["Babel (>=2.7)"] name = "joblib" version = "1.4.2" description = "Lightweight pipelining with Python functions" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -853,13 +895,14 @@ files = [ [[package]] name = "markdown-it-py" -version = "2.2.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] @@ -872,13 +915,14 @@ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0 linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -948,6 +992,7 @@ files = [ name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -957,27 +1002,29 @@ files = [ [[package]] name = "mdit-py-plugins" -version = "0.3.5" +version = "0.4.1" description = "Collection of plugins for markdown-it-py" +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, - {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, + {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, + {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, ] [package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" +markdown-it-py = ">=1.0.0,<4.0.0" [package.extras] code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +rtd = ["myst-parser", "sphinx-book-theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -989,6 +1036,7 @@ files = [ name = "mypy" version = "1.10.0" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1036,6 +1084,7 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1045,34 +1094,36 @@ files = [ [[package]] name = "myst-parser" -version = "0.18.1" -description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." +version = "3.0.1" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "myst-parser-0.18.1.tar.gz", hash = "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"}, - {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"}, + {file = "myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1"}, + {file = "myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87"}, ] [package.dependencies] -docutils = ">=0.15,<0.20" +docutils = ">=0.18,<0.22" jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.1,<0.4.0" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" pyyaml = "*" -sphinx = ">=4,<6" -typing-extensions = "*" +sphinx = ">=6,<8" [package.extras] -code-style = ["pre-commit (>=2.12,<3.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] -testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=6,<7)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx (<5.2)", "sphinx-pytest"] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "sphinx (>=7)", "sphinx-autodoc2 (>=0.5.0,<0.6.0)", "sphinx-book-theme (>=1.1,<2.0)", "sphinx-copybutton", "sphinx-design", "sphinx-pyscript", "sphinx-tippy (>=0.4.3)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.9.0,<0.10.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "defusedxml", "pytest (>=8,<9)", "pytest-cov", "pytest-param-files (>=0.6.0,<0.7.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0,<0.7.0)"] [[package]] name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1085,28 +1136,32 @@ setuptools = "*" [[package]] name = "nox" -version = "2022.11.21" +version = "2024.4.15" description = "Flexible test automation." +category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "nox-2022.11.21-py3-none-any.whl", hash = "sha256:0e41a990e290e274cb205a976c4c97ee3c5234441a8132c8c3fd9ea3c22149eb"}, - {file = "nox-2022.11.21.tar.gz", hash = "sha256:e21c31de0711d1274ca585a2c5fde36b1aa962005ba8e9322bf5eeed16dcd684"}, + {file = "nox-2024.4.15-py3-none-any.whl", hash = "sha256:6492236efa15a460ecb98e7b67562a28b70da006ab0be164e8821177577c0565"}, + {file = "nox-2024.4.15.tar.gz", hash = "sha256:ecf6700199cdfa9e5ea0a41ff5e6ef4641d09508eda6edb89d9987864115817f"}, ] [package.dependencies] -argcomplete = ">=1.9.4,<3.0" +argcomplete = ">=1.9.4,<4.0" colorlog = ">=2.6.1,<7.0.0" packaging = ">=20.9" -virtualenv = ">=14" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +virtualenv = ">=20.14.1" [package.extras] tox-to-nox = ["jinja2", "tox"] +uv = ["uv (>=0.1.6)"] [[package]] name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1144,6 +1199,7 @@ files = [ name = "packaging" version = "24.0" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1155,6 +1211,7 @@ files = [ name = "pandas" version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1190,8 +1247,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.1" pytz = ">=2020.1" @@ -1203,6 +1260,7 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] name = "pathspec" version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1214,6 +1272,7 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1230,6 +1289,7 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1245,6 +1305,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "3.5.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1261,16 +1322,18 @@ virtualenv = ">=20.10.0" [[package]] name = "prysk" -version = "0.20.0" +version = "0.17.0" description = "Functional tests for command line applications" +category = "dev" optional = false -python-versions = "<4.0.0,>=3.8" +python-versions = ">=3.8,<4.0.0" files = [ - {file = "prysk-0.20.0-py3-none-any.whl", hash = "sha256:3758f59febe1ff27710c8ba69a8edad42286050d041ed8df519fc4bbeea41133"}, - {file = "prysk-0.20.0.tar.gz", hash = "sha256:3499d24c9c8d534754d3915218cb2ab59cf59a8d6f37acfb68dc582650e67e33"}, + {file = "prysk-0.17.0-py3-none-any.whl", hash = "sha256:c2e0ce69ede821e5a7e03f576c51e2a35000c570f6e22cf7c13daec1b3978832"}, + {file = "prysk-0.17.0.tar.gz", hash = "sha256:0a500bb9ff742eca878d5802bad9fcfd7ba1c6bbae64b2a2ff96bff94d4f8ad8"}, ] [package.dependencies] +pytest-prysk = {version = ">=0.2.0,<0.3.0", optional = true, markers = "extra == \"pytest-plugin\""} rich = ">=13.3.1,<14.0.0" [package.extras] @@ -1280,6 +1343,7 @@ pytest-plugin = ["pytest-prysk (>=0.2.0,<0.3.0)"] name = "pyasn1" version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1291,6 +1355,7 @@ files = [ name = "pycparser" version = "2.22" description = "C parser in Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1302,6 +1367,7 @@ files = [ name = "pyexasol" version = "0.25.2" description = "Exasol python driver with extra features" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1326,6 +1392,7 @@ ujson = ["ujson"] name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1340,6 +1407,7 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pylint" version = "3.2.0" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1352,8 +1420,8 @@ astroid = ">=3.2.0,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -1370,6 +1438,7 @@ testutils = ["gitpython (>3)"] name = "pyopenssl" version = "24.1.0" description = "Python wrapper module around the OpenSSL library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1388,6 +1457,7 @@ test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1410,6 +1480,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-localserver" version = "0.8.1" description = "pytest plugin to test server connections locally." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1423,10 +1494,27 @@ werkzeug = ">=0.10" [package.extras] smtp = ["aiosmtpd"] +[[package]] +name = "pytest-prysk" +version = "0.2.0" +description = "Pytest plugin for prysk" +category = "dev" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_prysk-0.2.0-py3-none-any.whl", hash = "sha256:3180a9d3a6634e6e70107b2eed2a6a7420630b14ba2036598ef690f9b71be79f"}, + {file = "pytest_prysk-0.2.0.tar.gz", hash = "sha256:488d1f77e35beec9cad13e11368dcc5d09555ec31a4d6a3f9d901e78bbeeb2d1"}, +] + +[package.dependencies] +prysk = ">=0.15.0" +pytest = ">=7.3.2,<8.0.0" + [[package]] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1441,6 +1529,7 @@ six = ">=1.5" name = "pytz" version = "2024.1" description = "World timezone definitions, modern and historical" +category = "dev" optional = false python-versions = "*" files = [ @@ -1452,6 +1541,7 @@ files = [ name = "pyupgrade" version = "3.8.0" description = "A tool to automatically upgrade syntax for newer versions." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1466,6 +1556,7 @@ tokenize-rt = ">=3.2.0" name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1474,7 +1565,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1482,15 +1572,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1507,7 +1590,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1515,7 +1597,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1525,6 +1606,7 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1546,6 +1628,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -1565,6 +1648,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" +category = "dev" optional = false python-versions = ">=3.6,<4" files = [ @@ -1579,6 +1663,7 @@ pyasn1 = ">=0.1.3" name = "setuptools" version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1595,6 +1680,7 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "shellingham" version = "1.5.4" description = "Tool to Detect Surrounding Shell" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1602,10 +1688,26 @@ files = [ {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, ] +[[package]] +name = "shibuya" +version = "2024.5.15" +description = "A clean, responsive, and customizable Sphinx documentation theme with light/dark mode." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shibuya-2024.5.15-py3-none-any.whl", hash = "sha256:85a2338b6a900ade614d1f15533604672a9e55826ecc86617090b25fb4f05f50"}, + {file = "shibuya-2024.5.15.tar.gz", hash = "sha256:4053a79f97debf07de154812681aa86639c9eaaa845fa87f85611ac82b8f6019"}, +] + +[package.dependencies] +Sphinx = "*" + [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1617,6 +1719,7 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1628,6 +1731,7 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" optional = false python-versions = "*" files = [ @@ -1639,6 +1743,7 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1648,26 +1753,27 @@ files = [ [[package]] name = "sphinx" -version = "5.3.0" +version = "6.2.1" description = "Python documentation generator" +category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18.1,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -1678,13 +1784,14 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +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)"] [[package]] name = "sphinx-basic-ng" version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1702,6 +1809,7 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1716,10 +1824,35 @@ sphinx = ">=1.8" code-style = ["pre-commit (==2.12.1)"] rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] +[[package]] +name = "sphinx-design" +version = "0.5.0" +description = "A sphinx extension for designing beautiful, view size responsive web components." +category = "dev" +optional = false +python-versions = ">=3.8" +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"}, +] + +[package.dependencies] +sphinx = ">=5,<8" + +[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)"] + [[package]] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1735,6 +1868,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1750,6 +1884,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1765,6 +1900,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1779,6 +1915,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1794,6 +1931,7 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1809,6 +1947,7 @@ test = ["pytest"] name = "tenacity" version = "8.3.0" description = "Retry code until it succeeds" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1824,6 +1963,7 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] name = "tokenize-rt" version = "5.2.0" description = "A wrapper around the stdlib `tokenize` which roundtrips." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1835,6 +1975,7 @@ files = [ name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1846,6 +1987,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1857,6 +1999,7 @@ files = [ name = "tomlkit" version = "0.12.5" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1868,6 +2011,7 @@ files = [ name = "typeguard" version = "4.0.0" description = "Run-time type checker for Python" +category = "main" optional = false python-versions = ">=3.7.4" files = [ @@ -1887,6 +2031,7 @@ test = ["mypy (>=1.2.0)", "pytest (>=7)"] name = "typer" version = "0.12.3" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1904,6 +2049,7 @@ typing-extensions = ">=3.7.4.3" name = "types-requests" version = "2.31.0.20240406" description = "Typing stubs for requests" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1918,6 +2064,7 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1929,6 +2076,7 @@ files = [ name = "urllib3" version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1946,6 +2094,7 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.26.2" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1966,6 +2115,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "websocket-client" version = "1.8.0" description = "WebSocket client for Python with low level API options" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1982,6 +2132,7 @@ test = ["websockets"] name = "werkzeug" version = "3.0.3" description = "The comprehensive WSGI web application library." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1997,20 +2148,21 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "zipp" -version = "3.18.1" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<4.0" -content-hash = "45bfa394a88467a7b0cebf990123c453ee9b4cbb0f6c01e2678246d4f759d67f" +content-hash = "b60120805d4a92e557cf012c80bdc7811990f7796d48ab54513842863d987203" diff --git a/pyproject.toml b/pyproject.toml index 27e846c5..27fdcd7e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,11 +44,8 @@ pyexasol = "^0.25.2" dill = "^0.3.4" exasol-udf-mock-python = "^0.1.0" toml = ">=0.10.2" - -[tool.poetry.group.dev.dependencies] sphinx-copybutton = "^0.5.0" -myst-parser = "^0.18.1" -exasol-toolbox = ">=0.3.0" +exasol-toolbox = ">=0.12.0" pytest-localserver = "^0.8.1" [tool.coverage.run] @@ -73,6 +70,7 @@ force_grid_wrap = 2 [tool.pylint.master] fail-under = 7.0 +output-format = "colorized,json:.lint.json,text:.lint.txt" [tool.pylint.format] max-line-length = 88