From 5d7c6cf4d3ff8347d6a1301dfbb1e6020316d865 Mon Sep 17 00:00:00 2001 From: Torsten Kilias Date: Tue, 18 Jul 2023 10:17:23 +0200 Subject: [PATCH] #819: Fixed CI and adapted project to Exasol 8 (#367) * Updates SLCT, SLC-CI and SLC-CI-Setup * Adapted the aws-code-build/build_config.json to the new format * Rename TIMESTAMP data type to TIMESTAMP(3) to be compatible with Exasol 8.0 naming * Removed UDFDebugger from pandas dataframe tests, because it can be flaky and is only needed during debugging * Updated python apt packages * Updated binutils apt package * Ignored CVE-2023-3090, because it is a Kernel issue and not a container issue. * Removed or moved Python2 tests * Remove or fixed tests which used an unencrypted exasol connection, because this isn't possible anymore with Exasol 8 * Disabled certificate validation for row_level_security_adapter_script.txt * Ignored CVE-2023-3389 and CVE-2023-3390, because they belong to the kernel * Removed python2 from test_package_management_scripts.yaml * Removed python2 from list_installed_scripts/run_tests.sh Co-authored-by: Christoph Pirkl --- .../test_package_management_scripts.yaml | 5 +- aws-code-build/build_config.json | 34 +- exaslct_scripts/exaslct.sh | 2 +- .../tests/list_installed_scripts/run_tests.sh | 4 - .../packages/apt_get_packages_python | 4 +- .../base_test_deps/packages/apt_get_packages | 2 +- .../language_deps/packages/apt_get_packages | 2 +- .../flavor_base/security_scan/.trivyignore | 3 + poetry.lock | 1270 ++++++++++++++--- pyproject.toml | 6 +- test_container/tests/lang/python/basic.sql | 102 -- .../tests/lang/python/cologne_phonetic.sql | 124 -- .../tests/lang/python/combinations.sql | 41 - .../tests/lang/python/dynamic_input.sql | 110 -- .../tests/lang/python/dynamic_output.sql | 179 --- test_container/tests/lang/python/emit.sql | 26 - .../tests/lang/python/export_alias.sql | 141 -- .../tests/lang/python/get_connection.sql | 16 - .../tests/lang/python/import_alias.sql | 48 - test_container/tests/lang/python/metadata.sql | 195 --- .../tests/lang/python/numeric_functions.sql | 51 - .../lang/python/pathological_functions.sql | 44 - .../tests/lang/python/performance.sql | 70 - test_container/tests/lang/python/types.sql | 106 -- test_container/tests/lang/python/unicode.sql | 48 - .../tests/lang/python/vectorsize.sql | 66 - test_container/tests/test/generic/emit.py | 4 +- .../tests/test/pandas/all/emit_dtypes.py | 15 +- .../tests/test/pandas/pandas2/pandas.py | 15 +- test_container/tests/test/python/bugs.py | 89 -- .../tests/test/python/env_directive.py | 92 -- test_container/tests/test/python/general.py | 392 ----- test_container/tests/test/python/getpass.py | 31 - .../tests/test/python/script_import.py | 287 ---- .../tests/test/python/specific_types.py | 35 - test_container/tests/test/python/unicode.py | 50 - .../{python => python3}/external_modules.py | 0 .../{python => python3}/installed_packages.py | 0 .../tests/test/{python => python3}/network.py | 0 .../standard-flavor/7.0/available-packages.py | 51 - .../connect_to_exasol_with_websocket_api.py | 25 - .../all/paramiko_connection_test.py | 4 - .../all/pysftp_connection_test.py | 4 - .../all/row_level_security_adapter_script.txt | 7 +- .../row_level_security_with_websocket_api.py | 2 +- 45 files changed, 1158 insertions(+), 2644 deletions(-) delete mode 100644 test_container/tests/lang/python/basic.sql delete mode 100644 test_container/tests/lang/python/cologne_phonetic.sql delete mode 100644 test_container/tests/lang/python/combinations.sql delete mode 100644 test_container/tests/lang/python/dynamic_input.sql delete mode 100644 test_container/tests/lang/python/dynamic_output.sql delete mode 100644 test_container/tests/lang/python/emit.sql delete mode 100644 test_container/tests/lang/python/export_alias.sql delete mode 100644 test_container/tests/lang/python/get_connection.sql delete mode 100644 test_container/tests/lang/python/import_alias.sql delete mode 100644 test_container/tests/lang/python/metadata.sql delete mode 100644 test_container/tests/lang/python/numeric_functions.sql delete mode 100644 test_container/tests/lang/python/pathological_functions.sql delete mode 100644 test_container/tests/lang/python/performance.sql delete mode 100644 test_container/tests/lang/python/types.sql delete mode 100644 test_container/tests/lang/python/unicode.sql delete mode 100644 test_container/tests/lang/python/vectorsize.sql delete mode 100644 test_container/tests/test/python/bugs.py delete mode 100644 test_container/tests/test/python/env_directive.py delete mode 100755 test_container/tests/test/python/general.py delete mode 100755 test_container/tests/test/python/getpass.py delete mode 100755 test_container/tests/test/python/script_import.py delete mode 100755 test_container/tests/test/python/specific_types.py delete mode 100755 test_container/tests/test/python/unicode.py rename test_container/tests/test/{python => python3}/external_modules.py (100%) rename test_container/tests/test/{python => python3}/installed_packages.py (100%) rename test_container/tests/test/{python => python3}/network.py (100%) diff --git a/.github/workflows/test_package_management_scripts.yaml b/.github/workflows/test_package_management_scripts.yaml index 0d0cce9e7..c5bf6089b 100644 --- a/.github/workflows/test_package_management_scripts.yaml +++ b/.github/workflows/test_package_management_scripts.yaml @@ -12,12 +12,11 @@ jobs: steps: - uses: actions/checkout@v3 + - uses: actions/setup-python@v2 with: python-version: 3.8 - - uses: actions/setup-python@v2 - with: - python-version: 2.7 + - name: Init submodules run: git submodule update --init --recursive diff --git a/aws-code-build/build_config.json b/aws-code-build/build_config.json index cdd934297..4a06e104c 100644 --- a/aws-code-build/build_config.json +++ b/aws-code-build/build_config.json @@ -1,10 +1,28 @@ -{"build_ignore": - {"ignored_paths": - ["python_client", ".gitignore", ".dockerignore", "LICENSE", - "README.md", "find_duplicate_error_codes.sh", "find_error_codes.sh", - "find_highest_error_codes_per_module.sh", "find_incomplete_error_codes.sh", "find_next_error_code_per_module.sh", - "show_code_arround_error_codes.sh", "visualize_task_dependencies.sh", "udf-script-signature-generator", - ".github", "cpp_client", "emulator", "exaslct_scripts", "githooks"] +{ + "build": { + "base_branch": "master", + "ignore": { + "paths": [ + "python_client", + ".gitignore", + ".dockerignore", + "LICENSE", + "README.md", + "find_duplicate_error_codes.sh", + "find_error_codes.sh", + "find_highest_error_codes_per_module.sh", + "find_incomplete_error_codes.sh", + "find_next_error_code_per_module.sh", + "show_code_arround_error_codes.sh", + "visualize_task_dependencies.sh", + "udf-script-signature-generator", + ".github", + "cpp_client", + "emulator", + "exaslct_scripts", + "githooks" + ] + } }, - "base_branch": "master" + "release": {"timeout_in_minutes": 240} } diff --git a/exaslct_scripts/exaslct.sh b/exaslct_scripts/exaslct.sh index e4729b710..4d4081c7e 100755 --- a/exaslct_scripts/exaslct.sh +++ b/exaslct_scripts/exaslct.sh @@ -23,7 +23,7 @@ fi SCRIPT_DIR="$(dirname "$($rl -f "${BASH_SOURCE[0]}")")" -EXASLCT_GIT_REF="0.17.0" +EXASLCT_GIT_REF="0.18.0" RUNNER_IMAGE_NAME="$(bash "$SCRIPT_DIR/construct_docker_runner_image_name.sh" "$EXASLCT_GIT_REF")" bash "$SCRIPT_DIR/exaslct_within_docker_container_without_container_build.sh" "$RUNNER_IMAGE_NAME" "${@}" diff --git a/ext/scripts/tests/list_installed_scripts/run_tests.sh b/ext/scripts/tests/list_installed_scripts/run_tests.sh index a22faf5cb..fdde0490d 100644 --- a/ext/scripts/tests/list_installed_scripts/run_tests.sh +++ b/ext/scripts/tests/list_installed_scripts/run_tests.sh @@ -10,10 +10,6 @@ echo list_installed_apt.sh $PATH_TO_INSTALL_SCRIPTS/list_installed_apt.sh echo -echo list_installed_pip.sh python2 -$PATH_TO_INSTALL_SCRIPTS/list_installed_pip.sh python2 -echo - echo list_installed_pip.sh python3 $PATH_TO_INSTALL_SCRIPTS/list_installed_pip.sh python3 echo diff --git a/flavors/python-3.7-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages_python b/flavors/python-3.7-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages_python index 757ce5104..63faa558b 100644 --- a/flavors/python-3.7-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages_python +++ b/flavors/python-3.7-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages_python @@ -1,3 +1,3 @@ -python3.7-dev|3.7.16-1+bionic1 -python3.7|3.7.16-1+bionic1 +python3.7-dev|3.7.5-2ubuntu1~18.04.2 +python3.7|3.7.5-2ubuntu1~18.04.2 python3-distutils|3.6.9-1~18.04 # Note: required by install_python3.7_pip.sh diff --git a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/base_test_deps/packages/apt_get_packages b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/base_test_deps/packages/apt_get_packages index 37ad21f9e..41cd2c77d 100644 --- a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/base_test_deps/packages/apt_get_packages +++ b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/base_test_deps/packages/apt_get_packages @@ -1,6 +1,6 @@ gdb|9.2-0ubuntu1~20.04.1 valgrind|1:3.15.0-1ubuntu9.1 gdbserver|9.2-0ubuntu1~20.04.1 -binutils|2.34-6ubuntu1.5 +binutils|2.34-6ubuntu1.6 patchelf|0.10-2build1 strace|5.5-3ubuntu1 diff --git a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages index 9ed70ac04..c902922ac 100644 --- a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages +++ b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/language_deps/packages/apt_get_packages @@ -1,5 +1,5 @@ ca-certificates|20230311ubuntu0.20.04.1 -python3.8-dev|3.8.10-0ubuntu1~20.04.7 +python3.8-dev|3.8.10-0ubuntu1~20.04.8 python3-distutils|3.8.10-0ubuntu1~20.04 curl|7.68.0-1ubuntu2.18 diff --git a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/security_scan/.trivyignore b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/security_scan/.trivyignore index f71660988..6c457c7a8 100644 --- a/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/security_scan/.trivyignore +++ b/flavors/python-3.8-minimal-EXASOL-6.2.0/flavor_base/security_scan/.trivyignore @@ -9,6 +9,9 @@ CVE-2022-1116 CVE-2022-29581 CVE-2022-21499 CVE-2022-43945 +CVE-2023-3090 +CVE-2023-3389 +CVE-2023-3390 #CVE-2022-23648 is a bug in containerd, not issue for containers CVE-2022-23648 #issue in cgroups, but no threat for ScriptLanguageContainer diff --git a/poetry.lock b/poetry.lock index 1ec9a436b..8ed1144b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,35 @@ # This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +[[package]] +name = "annotated-types" +version = "0.5.0" +description = "Reusable constraint types to use with typing.Annotated" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, + {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + +[[package]] +name = "argcomplete" +version = "3.1.1" +description = "Bash tab completion for argparse" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argcomplete-3.1.1-py3-none-any.whl", hash = "sha256:35fa893a88deea85ea7b20d241100e64516d6af6d7b0ae2bed1d263d26f70948"}, + {file = "argcomplete-3.1.1.tar.gz", hash = "sha256:6c4c563f14f01440aaffa3eae13441c5db2357b5eec639abe7c0b15334627dff"}, +] + +[package.extras] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] + [[package]] name = "attrs" version = "23.1.0" @@ -19,20 +49,105 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "bcrypt" +version = "4.0.1" +description = "Modern password hashing for your software and your servers" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, + {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, + {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, + {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "boto3" -version = "1.26.143" +version = "1.26.163" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.143-py3-none-any.whl", hash = "sha256:65e91de5c0ee2e4786ab3b144410312344827154aa5bfb4e7b455e5e107cdbf8"}, - {file = "boto3-1.26.143.tar.gz", hash = "sha256:d973751c5ea2db7743f80ee8552043cace8f18a2472cae1ab93ffbfb6889b825"}, + {file = "boto3-1.26.163-py3-none-any.whl", hash = "sha256:61b66b9ab03bf59c26f546c9dca053a888dd3e7e85d49a5de6112232b5e5f6c5"}, + {file = "boto3-1.26.163.tar.gz", hash = "sha256:341ad62c53f9717cfe5fb2ae33e34f2dd3ee930abaa0fc864a10c018c0c78783"}, ] [package.dependencies] -botocore = ">=1.29.143,<1.30.0" +botocore = ">=1.29.163,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -41,14 +156,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.143" +version = "1.29.163" description = "Low-level, data-driven core of boto 3." category = "main" optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.143-py3-none-any.whl", hash = "sha256:fcb424c750a78a9f86b5ee8319bfa20de8528a80aadcdd171910bcb8d45c3055"}, - {file = "botocore-1.29.143.tar.gz", hash = "sha256:e5b8dd2fa750f0476667753dc018c2b14a542fec7e20edd3a7613b6d2df2c32a"}, + {file = "botocore-1.29.163-py3-none-any.whl", hash = "sha256:dd0af0de58c12df39e043be3ad864a47d8b8ef10eedde15a73504ff75dcc261b"}, + {file = "botocore-1.29.163.tar.gz", hash = "sha256:f374bea656bf9025ad685f47e7b8ff9e20b1a2584823855ba1c4c58957768612"}, ] [package.dependencies] @@ -148,6 +263,18 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "chardet" +version = "5.1.0" +description = "Universal encoding detector for Python 3" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, + {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, +] + [[package]] name = "charset-normalizer" version = "3.1.0" @@ -235,14 +362,14 @@ files = [ [[package]] name = "click" -version = "8.1.3" +version = "8.1.4" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.4-py3-none-any.whl", hash = "sha256:2739815aaa5d2c986a88f1e9230c55e17f0caad3d958a5e13ad0797c166db9e3"}, + {file = "click-8.1.4.tar.gz", hash = "sha256:b97d0c74955da062a7d4ef92fadb583806a585b2ea81958a81bd72726cbb8e37"}, ] [package.dependencies] @@ -260,33 +387,48 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "configobj" +version = "5.0.8" +description = "Config file reading, writing and validation." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "configobj-5.0.8-py2.py3-none-any.whl", hash = "sha256:a7a8c6ab7daade85c3f329931a807c8aee750a2494363934f8ea84d8a54c87ea"}, + {file = "configobj-5.0.8.tar.gz", hash = "sha256:6f704434a07dc4f4dc7c9a745172c1cad449feb548febd9f7fe362629c627a97"}, +] + +[package.dependencies] +six = "*" + [[package]] name = "cryptography" -version = "41.0.0" +version = "41.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8"}, - {file = "cryptography-41.0.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0"}, - {file = "cryptography-41.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d"}, - {file = "cryptography-41.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46"}, - {file = "cryptography-41.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237"}, - {file = "cryptography-41.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4"}, - {file = "cryptography-41.0.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75"}, - {file = "cryptography-41.0.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d"}, - {file = "cryptography-41.0.0-cp37-abi3-win32.whl", hash = "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928"}, - {file = "cryptography-41.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be"}, - {file = "cryptography-41.0.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5"}, - {file = "cryptography-41.0.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb"}, - {file = "cryptography-41.0.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be"}, - {file = "cryptography-41.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9"}, - {file = "cryptography-41.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2"}, - {file = "cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d"}, - {file = "cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895"}, - {file = "cryptography-41.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55"}, - {file = "cryptography-41.0.0.tar.gz", hash = "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78"}, + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699"}, + {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b"}, + {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db"}, + {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31"}, + {file = "cryptography-41.0.1-cp37-abi3-win32.whl", hash = "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5"}, + {file = "cryptography-41.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039"}, + {file = "cryptography-41.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a"}, + {file = "cryptography-41.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5"}, + {file = "cryptography-41.0.1.tar.gz", hash = "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006"}, ] [package.dependencies] @@ -302,6 +444,51 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "datamodel-code-generator" +version = "0.21.1" +description = "Datamodel Code Generator" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "datamodel_code_generator-0.21.1-py3-none-any.whl", hash = "sha256:9898d4a39a54638022850b0df85fab0ef20394382e88482b8bf8925d4817c493"}, + {file = "datamodel_code_generator-0.21.1.tar.gz", hash = "sha256:feab1c222c5bc3b7c53e1dc8b299bbc261bb17e9dbc22fdd60fc3a2806694ecc"}, +] + +[package.dependencies] +argcomplete = ">=1.10,<4.0" +black = ">=19.10b0" +genson = ">=1.2.1,<2.0" +inflect = ">=4.1.0,<6.0" +isort = ">=4.3.21,<6.0" +jinja2 = ">=2.10.1,<4.0" +openapi-spec-validator = ">=0.2.8,<=0.5.2" +packaging = "*" +prance = ">=0.18.2" +pydantic = [ + {version = ">=1.10.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""}, + {version = ">=1.5.1,<3.0", extras = ["email"], markers = "python_version < \"3.10\""}, + {version = ">=1.9.0,<3.0", extras = ["email"], markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, +] +PySnooper = ">=0.4.1,<2.0.0" +toml = ">=0.10.0,<1.0.0" + +[package.extras] +http = ["httpx"] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "deprecated" version = "1.2.14" @@ -320,16 +507,37 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +[[package]] +name = "dnspython" +version = "2.3.0" +description = "DNS toolkit" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, + {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, +] + +[package.extras] +curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] +dnssec = ["cryptography (>=2.6,<40.0)"] +doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + [[package]] name = "docker" -version = "6.1.2" +version = "6.1.3" description = "A Python library for the Docker Engine API." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "docker-6.1.2-py3-none-any.whl", hash = "sha256:134cd828f84543cbf8e594ff81ca90c38288df3c0a559794c12f2e4b634ea19e"}, - {file = "docker-6.1.2.tar.gz", hash = "sha256:dcc088adc2ec4e7cfc594e275d8bd2c9738c56c808de97476939ef67db5af8c2"}, + {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, + {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, ] [package.dependencies] @@ -353,6 +561,22 @@ files = [ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] +[[package]] +name = "email-validator" +version = "2.0.0.post2" +description = "A robust email address syntax and deliverability validation library." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "email_validator-2.0.0.post2-py3-none-any.whl", hash = "sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c"}, + {file = "email_validator-2.0.0.post2.tar.gz", hash = "sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + [[package]] name = "exasol-bucketfs" version = "0.8.0" @@ -384,20 +608,21 @@ files = [ [[package]] name = "exasol-integration-test-docker-environment" -version = "1.6.0" +version = "1.7.1" description = "Integration Test Docker Environment for Exasol" category = "main" optional = false python-versions = ">=3.8,<4" files = [ - {file = "exasol_integration_test_docker_environment-1.6.0-py3-none-any.whl", hash = "sha256:81f9c10eb5f62c7fabf77adaf72582ff7b238a94aaf00df39c859f096b9e5297"}, - {file = "exasol_integration_test_docker_environment-1.6.0.tar.gz", hash = "sha256:aa0208bb6e753c3c359723d5b260e29816565b249cbed8bdc81581759594fb56"}, + {file = "exasol_integration_test_docker_environment-1.7.1-py3-none-any.whl", hash = "sha256:531bf53a5c60c422850472710d3ad11983d8636cb5edfbb705c86f0a4a69a125"}, + {file = "exasol_integration_test_docker_environment-1.7.1.tar.gz", hash = "sha256:7fb6b2e225673c124e1ebecd1bbc03d313bf56d3915d526496f21ba0ca9fa816"}, ] [package.dependencies] click = ">=7.0" docker = {version = ">=4.0.0", markers = "sys_platform != \"win32\""} exasol-bucketfs = ">=0.6.0,<2.0.0" +fabric = ">=3.0.1,<4.0.0" gitpython = ">=2.1.0" humanfriendly = ">=4.18" importlib_resources = ">=5.4.0" @@ -406,6 +631,7 @@ jsonpickle = ">=1.1" luigi = ">=2.8.4" netaddr = ">=0.7.19" networkx = ">=2.3" +portalocker = ">=2.7.0,<3.0.0" pydot = ">=1.4.0" pyexasol = ">=0.25.2,<0.26.0" pytest = ">=7.2.2,<8.0.0" @@ -415,59 +641,62 @@ simplejson = ">=3.16.0" [[package]] name = "exasol-script-languages-container-ci" -version = "1.1.0" +version = "1.3.2" description = "Implements CI builds for script-language-container." category = "main" optional = false python-versions = ">=3.8.0,<4.0" files = [ - {file = "exasol_script_languages_container_ci-1.1.0-py3-none-any.whl", hash = "sha256:1034fc0d93accf18a04df002f50bdc6bf514a0dbdee746c5aaeedb176ca5bbd0"}, - {file = "exasol_script_languages_container_ci-1.1.0.tar.gz", hash = "sha256:7e970733273d6873318f74193e5a2e1e478081d3ed32a0af3f180b036e130106"}, + {file = "exasol_script_languages_container_ci-1.3.2-py3-none-any.whl", hash = "sha256:3e755f5f35b96455b71a15926fb5c913da9a787bf739e1ea51634339592565a1"}, + {file = "exasol_script_languages_container_ci-1.3.2.tar.gz", hash = "sha256:22be54ef98188119206c57081d946dfbe64aa10fd0a80a4c4a6ce3e5c3859126"}, ] [package.dependencies] click = ">=8.0.3,<9.0.0" -exasol-integration-test-docker-environment = ">=1.4.0,<2.0.0" -exasol-script-languages-container-tool = ">=0.17.0,<0.18.0" +datamodel-code-generator = ">=0.21.0,<0.22.0" +exasol-integration-test-docker-environment = ">=1.7.1,<2.0.0" +exasol-script-languages-container-tool = ">=0.18.0,<0.19.0" GitPython = ">=3.1.0" PyGithub = ">=1.55.0,<2.0.0" -setuptools = ">=67.6.0,<68.0.0" +setuptools = ">=68.0.0,<69.0.0" [[package]] name = "exasol-script-languages-container-ci-setup" -version = "1.0.0" +version = "1.2.0" description = "Manages AWS cloud CI build infrastructure." category = "main" optional = false python-versions = ">=3.8.0,<4.0" files = [ - {file = "exasol-script-languages-container-ci-setup-1.0.0.tar.gz", hash = "sha256:0145f5db346e129ac30f1a0490c4acda84a5ffbfff948bc36b6b72b5ac75295a"}, - {file = "exasol_script_languages_container_ci_setup-1.0.0-py3-none-any.whl", hash = "sha256:37e3595e30880257cfa22d841d89ecbf09447fd06240e58d8eb386d317a38c85"}, + {file = "exasol_script_languages_container_ci_setup-1.2.0-py3-none-any.whl", hash = "sha256:e45033e64920e4166f49c7cb0c21edbf119ddc66672c8925cec03ee4d5240c3c"}, + {file = "exasol_script_languages_container_ci_setup-1.2.0.tar.gz", hash = "sha256:f914266baed0646dcd2e9f4af4e7875b21fc40e9e263cc62432f2cb7885e18c2"}, ] [package.dependencies] -boto3 = ">=1.22.0,<2.0.0" +boto3 = "1.26.163" +botocore = "1.29.163" click = ">=8.1.3,<9.0.0" exasol_error_reporting_python = ">=0.3.0,<0.4.0" -exasol-script-languages-container-ci = ">=1.0.0,<2.0.0" +exasol-script-languages-container-ci = ">=1.3.0,<2.0.0" jinja2 = ">=3.1.0" jsonschema = ">=4.17.3,<5.0.0" PyGithub = ">=1.55.0,<2.0.0" [[package]] name = "exasol-script-languages-container-tool" -version = "0.17.0" +version = "0.18.0" description = "Script Languages Container Tool" category = "main" optional = false python-versions = ">=3.8,<4" files = [ - {file = "exasol_script_languages_container_tool-0.17.0-py3-none-any.whl", hash = "sha256:53d6b1c93d256c9b2d0ce24895094db0a80891d2b649bc5acf4705727b670646"}, - {file = "exasol_script_languages_container_tool-0.17.0.tar.gz", hash = "sha256:bf04a2881e4baf4beb454c02e8a506698b0e52fa2cdd30a8f879d62ac28b716f"}, + {file = "exasol_script_languages_container_tool-0.18.0-py3-none-any.whl", hash = "sha256:ba111aa79476872255e70be6470a58b842866bfc8a00409011ce5cc30ceb477d"}, + {file = "exasol_script_languages_container_tool-0.18.0.tar.gz", hash = "sha256:12052d6c6db95bad256e375af4cbbdc96c49f4ade24d869395cf8d4df7e32d02"}, ] [package.dependencies] -exasol-integration-test-docker-environment = ">=1.6.0,<2.0.0" +configobj = ">=5.0.8,<6.0.0" +exasol-integration-test-docker-environment = ">=1.7.1,<2.0.0" importlib_metadata = ">=4.6.0" importlib-resources = ">=5.4.0" networkx = "2.8.2" @@ -475,19 +704,50 @@ typeguard = "<3.0.0" [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "fabric" +version = "3.1.0" +description = "High level SSH command execution" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "fabric-3.1.0-py3-none-any.whl", hash = "sha256:0a13217db1aa203167376119b0e165081c5906c31e2b2104410685d1310ef8fb"}, + {file = "fabric-3.1.0.tar.gz", hash = "sha256:ea1c5ea3956d196b5990ba720cc8ee457fa1b9c6f265ab3b643ff63b05e8970a"}, +] + +[package.dependencies] +decorator = ">=5" +invoke = ">=2.0" +paramiko = ">=2.4" + +[package.extras] +pytest = ["pytest (>=7)"] + +[[package]] +name = "genson" +version = "1.2.2" +description = "GenSON is a powerful, user-friendly JSON Schema generator." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "genson-1.2.2.tar.gz", hash = "sha256:8caf69aa10af7aee0e1a1351d1d06801f4696e005f06cedef438635384346a16"}, +] + [[package]] name = "gitdb" version = "4.0.10" @@ -547,14 +807,14 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.6.0" +version = "6.7.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, - {file = "importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, ] [package.dependencies] @@ -563,7 +823,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" @@ -584,6 +844,22 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +[[package]] +name = "inflect" +version = "5.6.2" +description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238"}, + {file = "inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9"}, +] + +[package.extras] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -596,6 +872,36 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "invoke" +version = "2.1.3" +description = "Pythonic task execution" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "invoke-2.1.3-py3-none-any.whl", hash = "sha256:51e86a08d964160e01c44eccd22f50b25842bd96a9c63c11177032594cb86740"}, + {file = "invoke-2.1.3.tar.gz", hash = "sha256:a3b15d52d50bbabd851b8a39582c772180b614000fa1612b4d92484d54d38c6b"}, +] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +category = "main" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, + {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, +] + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + [[package]] name = "jinja2" version = "3.1.2" @@ -628,14 +934,14 @@ files = [ [[package]] name = "joblib" -version = "1.2.0" +version = "1.3.1" description = "Lightweight pipelining with Python functions" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, + {file = "joblib-1.3.1-py3-none-any.whl", hash = "sha256:89cf0529520e01b3de7ac7b74a8102c90d16d54c64b5dd98cafcd14307fdf915"}, + {file = "joblib-1.3.1.tar.gz", hash = "sha256:1f937906df65329ba98013dc9692fe22a4c5e4a648112de500508b18a21b41e3"}, ] [[package]] @@ -657,26 +963,108 @@ testing-libs = ["simplejson", "ujson"] [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.18.0" description = "An implementation of JSON Schema validation for Python" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.18.0-py3-none-any.whl", hash = "sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60"}, + {file = "jsonschema-4.18.0.tar.gz", hash = "sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +jsonschema-specifications = ">=2023.03.6" pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-spec" +version = "0.1.3" +description = "JSONSchema Spec with object-oriented paths" +category = "main" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "jsonschema_spec-0.1.3-py3-none-any.whl", hash = "sha256:b3cde007ad65c2e631e2f8653cf187124a2c714d02d9fafbab68ad64bf5745d6"}, + {file = "jsonschema_spec-0.1.3.tar.gz", hash = "sha256:8d8db7c255e524fab1016a952a9143e5b6e3c074f4ed25d1878f8e97806caec0"}, +] + +[package.dependencies] +jsonschema = ">=4.0.0,<5.0.0" +pathable = ">=0.4.1,<0.5.0" +PyYAML = ">=5.1" +typing-extensions = ">=4.3.0,<5.0.0" + +[[package]] +name = "jsonschema-specifications" +version = "2023.6.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.6.1-py3-none-any.whl", hash = "sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7"}, + {file = "jsonschema_specifications-2023.6.1.tar.gz", hash = "sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.28.0" + +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] + [[package]] name = "lockfile" version = "0.12.2" @@ -713,62 +1101,74 @@ toml = ["toml (<2.0.0)"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] @@ -802,6 +1202,44 @@ doc = ["nb2plots (>=0.6)", "numpydoc (>=1.3)", "pillow (>=9.1)", "pydata-sphinx- extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] test = ["codecov (>=2.1)", "pytest (>=7.1)", "pytest-cov (>=3.0)"] +[[package]] +name = "openapi-schema-validator" +version = "0.4.3" +description = "OpenAPI schema validation for Python" +category = "main" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "openapi_schema_validator-0.4.3-py3-none-any.whl", hash = "sha256:f1eff2a7936546a3ce62b88a17d09de93c9bd229cbc43cb696c988a61a382548"}, + {file = "openapi_schema_validator-0.4.3.tar.gz", hash = "sha256:6940dba9f4906c97078fea6fd9d5a3a3384207db368c4e32f6af6abd7c5c560b"}, +] + +[package.dependencies] +jsonschema = ">=4.0.0,<5.0.0" +rfc3339-validator = "*" + +[[package]] +name = "openapi-spec-validator" +version = "0.5.2" +description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" +category = "main" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "openapi_spec_validator-0.5.2-py3-none-any.whl", hash = "sha256:1f8db08ecbcf4ec8c558d65b65b3b7b428f81da6642f2f163e992ae3e17b229c"}, + {file = "openapi_spec_validator-0.5.2.tar.gz", hash = "sha256:ebed7f1c567780859402ad64b128e17f519d15f605f1b41d1e9a4a7a1690be07"}, +] + +[package.dependencies] +importlib-resources = {version = ">=5.8.0,<6.0.0", markers = "python_version < \"3.9\""} +jsonschema = ">=4.0.0,<5.0.0" +jsonschema-spec = ">=0.1.1,<0.2.0" +lazy-object-proxy = ">=1.7.1,<2.0.0" +openapi-schema-validator = ">=0.3.2,<0.5" + +[package.extras] +requests = ["requests"] + [[package]] name = "packaging" version = "23.1" @@ -814,6 +1252,52 @@ files = [ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] +[[package]] +name = "paramiko" +version = "3.2.0" +description = "SSH2 protocol library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "paramiko-3.2.0-py3-none-any.whl", hash = "sha256:df0f9dd8903bc50f2e10580af687f3015bf592a377cd438d2ec9546467a14eb8"}, + {file = "paramiko-3.2.0.tar.gz", hash = "sha256:93cdce625a8a1dc12204439d45033f3261bdb2c201648cfcdc06f9fd0f94ec29"}, +] + +[package.dependencies] +bcrypt = ">=3.2" +cryptography = ">=3.3" +pynacl = ">=1.5" + +[package.extras] +all = ["gssapi (>=1.4.1)", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] +gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] +invoke = ["invoke (>=2.0)"] + +[[package]] +name = "pathable" +version = "0.4.3" +description = "Object-oriented paths" +category = "main" +optional = false +python-versions = ">=3.7.0,<4.0.0" +files = [ + {file = "pathable-0.4.3-py3-none-any.whl", hash = "sha256:cdd7b1f9d7d5c8b8d3315dbf5a86b2596053ae845f056f57d97c0eefff84da14"}, + {file = "pathable-0.4.3.tar.gz", hash = "sha256:5c869d315be50776cc8a993f3af43e0c60dc01506b399643f919034ebf4cdcab"}, +] + +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + [[package]] name = "pkgutil-resolve-name" version = "1.3.10" @@ -826,22 +1310,85 @@ files = [ {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, ] +[[package]] +name = "platformdirs" +version = "3.8.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.8.1-py3-none-any.whl", hash = "sha256:cec7b889196b9144d088e4c57d9ceef7374f6c39694ad1577a0aab50d27ea28c"}, + {file = "platformdirs-3.8.1.tar.gz", hash = "sha256:f87ca4fcff7d2b0f81c6a748a77973d7af0f4d526f98f308477c3c436c74d528"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] + [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "portalocker" +version = "2.7.0" +description = "Wraps the portalocker recipe for easy usage" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"}, + {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] + +[[package]] +name = "prance" +version = "23.6.21.0" +description = "Resolving Swagger/OpenAPI 2.0 and 3.0.0 Parser" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "prance-23.6.21.0-py3-none-any.whl", hash = "sha256:6a4276fa07ed9f22feda4331097d7503c4adc3097e46ffae97425f2c1026bd9f"}, + {file = "prance-23.6.21.0.tar.gz", hash = "sha256:d8c15f8ac34019751cc4945f866d8d964d7888016d10de3592e339567177cabe"}, +] + +[package.dependencies] +chardet = ">=3.0" +packaging = ">=21.3" +requests = ">=2.25" +"ruamel.yaml" = ">=0.17.10" +six = ">=1.15,<2.0" + +[package.extras] +cli = ["click (>=7.0)"] +dev = ["bumpversion (>=0.6)", "pytest (>=6.1)", "pytest-cov (>=2.11)", "sphinx (>=3.4)", "towncrier (>=19.2)", "tox (>=3.4)"] +flex = ["flex (>=6.13,<7.0)"] +icu = ["PyICU (>=2.4,<3.0)"] +osv = ["openapi-spec-validator (>=0.5.1,<0.6.0)"] +ssv = ["swagger-spec-validator (>=2.4,<3.0)"] + [[package]] name = "pyasn1" version = "0.5.0" @@ -866,6 +1413,141 @@ files = [ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +[[package]] +name = "pydantic" +version = "2.0.2" +description = "Data validation using Python type hints" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.0.2-py3-none-any.whl", hash = "sha256:f5581e0c79b2ec2fa25a9d30d766629811cdda022107fa73d022ab5578873ae3"}, + {file = "pydantic-2.0.2.tar.gz", hash = "sha256:b802f5245b8576315fe619e5989fd083448fa1258638ef9dac301ca60878396d"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.1.2" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.1.2" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.1.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:b4815720c266e832b20e27a7a5f3772bb09fdedb31a9a34bab7b49d98967ef5a"}, + {file = "pydantic_core-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8884a1dbfc5cb8c54b48446ca916d4577c1f4d901126091e4ab25d00194e065f"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74a33aa69d476773230396396afb8e11908f8dafdcfd422e746770599a3f889d"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af832edd384755826e494ffdcf1fdda86e4babc42a0b18d342943fb18181040e"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_24_armv7l.whl", hash = "sha256:017700236ea2e7afbef5d3803559c80bd8720306778ebd49268de7ce9972e83e"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:c2d00a96fdf26295c6f25eaf9e4a233f353146a73713cd97a5f5dc6090c3aef2"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_24_s390x.whl", hash = "sha256:2575664f0a559a7b951a518f6f34c23cab7190f34f8220b8c8218c4f403147ee"}, + {file = "pydantic_core-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24c3c9180a2d19d640bacc2d00f497a9a1f2abadb2a9ee201b56bb03bc5343bd"}, + {file = "pydantic_core-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:88a56f0f6d020b4d17641f4b4d1f9540a536d4146768d059c430e97bdb485fc1"}, + {file = "pydantic_core-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fa38a76e832743866aed6b715869757074b06357d1a260163ec26d84974245fe"}, + {file = "pydantic_core-2.1.2-cp310-none-win32.whl", hash = "sha256:a772c652603855d7180015849d483a1f539351a263bb9b81bfe85193a33ce124"}, + {file = "pydantic_core-2.1.2-cp310-none-win_amd64.whl", hash = "sha256:b4673d1f29487608d613ebcc5caa99ba15eb58450a7449fb6d800f29d90bebc1"}, + {file = "pydantic_core-2.1.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:76c9c55462740d728b344e3a087775846516c3fee31ec56e2075faa7cfcafcbf"}, + {file = "pydantic_core-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb854ec52e6e2e05b83d647695f4d913452fdd45a3dfa8233d7dab5967b3908f"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ac140d54da366672f6b91f9a1e8e2d4e7e72720143353501ae886d3fca03272"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:818f5cb1b209ab1295087c45717178f4bbbd2bd7eda421f7a119e7b9b736a3cb"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_24_armv7l.whl", hash = "sha256:db4564aea8b3cb6cf1e5f3fd80f1ced73a255d492396d1bd8abd688795b34d63"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_24_ppc64le.whl", hash = "sha256:2ca2d2d5ab65fb40dd05259965006edcc62a9d9b30102737c0a6f45bcbd254e8"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_24_s390x.whl", hash = "sha256:7c7ad8958aadfbcd664078002246796ecd5566b64b22f6af4fd1bbcec6bf8f60"}, + {file = "pydantic_core-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:080a7af828388284a68ad7d3d3eac3bcfff6a580292849aff087e7d556ec42d4"}, + {file = "pydantic_core-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad7029fb2251c1ac7d3acdd607e540d40d137a7d43a5e5acdcfdbd38db3fc0a"}, + {file = "pydantic_core-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1635a37137fafbc6ee0a8c879857e05b30b1aabaa927e653872b71f1501b1502"}, + {file = "pydantic_core-2.1.2-cp311-none-win32.whl", hash = "sha256:eb4301f009a44bb5db5edfe4e51a8175a4112b566baec07f4af8b1f8cb4649a2"}, + {file = "pydantic_core-2.1.2-cp311-none-win_amd64.whl", hash = "sha256:ebf583f4d9b52abd15cc59e5f6eeca7e3e9741c6ea62d8711c00ac3acb067875"}, + {file = "pydantic_core-2.1.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:90b06bb47e60173d24c7cb79670aa8dd6081797290353b9d3c66d3a23e88eb34"}, + {file = "pydantic_core-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e5761ce986ec709897b1b965fad9743f301500434bea3cbab2b6e662571580f"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9f8bf1d7008a58fbb6eb334dc6e2f2905400cced8dadb46c4ca28f005a8562"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a014ee88980013d192a718cbb88e8cea20acd3afad69bc6d15672d05a49cdb6"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_24_armv7l.whl", hash = "sha256:8125152b03dd91deca5afe5b933a1994b39405adf6be2fe8dce3632319283f85"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_24_ppc64le.whl", hash = "sha256:dc737506b4a0ba2922a2626fc6d620ce50a46aebd0fe2fbcad1b93bbdd8c7e78"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_24_s390x.whl", hash = "sha256:bb471ea8650796060afc99909d9b75da583d317e52f660faf64c45f70b3bf1e2"}, + {file = "pydantic_core-2.1.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1fad38db1744d27061df516e59c5025b09b0a50a337c04e6eebdbddc18951bc"}, + {file = "pydantic_core-2.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:94d368af9e6563de6e7170a74710a2cbace7a1e9c8e507d9e3ac34c7065d7ae3"}, + {file = "pydantic_core-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bd95d223de5162811a7b36c73d48eac4fee03b075132f3a1b73c132ce157a60c"}, + {file = "pydantic_core-2.1.2-cp312-none-win32.whl", hash = "sha256:cd62f73830d4715bc643ae39de0bd4fb9c81d6d743530074da91e77a2cccfe67"}, + {file = "pydantic_core-2.1.2-cp312-none-win_amd64.whl", hash = "sha256:51968887d6bd1eaa7fc7759701ea8ccb470c04654beaa8ede6835b0533f206a9"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:7ff6bfe63f447a509ed4d368a7f4ba6a7abc03bc4744fc3fb30f2ffab73f3821"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:4e67f9b9dfda2e42b39459cbf99d319ccb90da151e35cead3521975b2afbf673"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b815a769b019dd96be6571096f246b74f63330547e9b30244c51b4a2eb0277fc"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aff436c23c68449601b3fba7075b4f37ef8fbb893c8c1ed3ef898f090332b1e"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_24_armv7l.whl", hash = "sha256:2ee3ae58f271851362f6c9b33e4c9f9e866557ec7d8c03dc091e9b5aa5566cec"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:cf92dccca8f66e987f6c4378700447f82b79e86407912ab1ee06b16b82f05120"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_24_s390x.whl", hash = "sha256:4663293a36a851a860b1299c50837914269fca127434911297dd39fea9667a01"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c917f7a41d9d09b8b024a5d65cf37e5588ccdb6e610d2df565fb7186b1f3b1c"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:06ae67547251135a1b3f8dd465797b13146295a3866bc12ddd73f7512787bb7c"}, + {file = "pydantic_core-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4938b32c09dbcecbeb652327cb4a449b1ef1a1bf6c8fc2c8241aa6b8f6d63b54"}, + {file = "pydantic_core-2.1.2-cp37-none-win32.whl", hash = "sha256:682ff9228c838018c47dfa89b3d84cca45f88cacde28807ab8296ec221862af4"}, + {file = "pydantic_core-2.1.2-cp37-none-win_amd64.whl", hash = "sha256:6e3bcb4a9bc209a61ea2aceb7433ce2ece32c7e670b0c06848bf870c9b3e7d87"}, + {file = "pydantic_core-2.1.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:2278ca0b0dfbcfb1e12fa58570916dc260dc72bee5e6e342debf5329d8204688"}, + {file = "pydantic_core-2.1.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87cff210af3258ca0c829e3ebc849d7981bfde23a99d6cb7a3c17a163b3dbad2"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7684b5fb906b37e940c5df3f57118f32e033af5e4770e5ae2ae56fbd2fe1a30a"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3747a4178139ebf3f19541285b2eb7c886890ca4eb7eec851578c02a13cc1385"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_24_armv7l.whl", hash = "sha256:e17056390068afd4583d88dcf4d4495764e4e2c7d756464468e0d21abcb8931e"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:c720e55cef609d50418bdfdfb5c44a76efc020ae7455505788d0113c54c7df55"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_24_s390x.whl", hash = "sha256:b59a64c367f350873c40a126ffe9184d903d2126c701380b4b55753484df5948"}, + {file = "pydantic_core-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68a2a767953c707d9575dcf14d8edee7930527ee0141a8bb612c22d1f1059f9a"}, + {file = "pydantic_core-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae46769d9a7138d58cd190441cac14ce954010a0081f28462ed916c8e55a4f"}, + {file = "pydantic_core-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc909f62325a631e1401dd07dfc386986dbcac15f98c9ff2145d930678a9d25a"}, + {file = "pydantic_core-2.1.2-cp38-none-win32.whl", hash = "sha256:b4038869ba1d8fa33863b4b1286ab07e6075a641ae269b865f94d7e10b3e800e"}, + {file = "pydantic_core-2.1.2-cp38-none-win_amd64.whl", hash = "sha256:5948af62f323252d56acaec8ebfca5f15933f6b72f8dbe3bf21ee97b2d10e3f0"}, + {file = "pydantic_core-2.1.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:8e6ce261ccb9a986953c4dce070327e4954f9dd4cd214746dfc70efbc713b6a1"}, + {file = "pydantic_core-2.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35d634d9d1ed280c87bc2a7a6217b8787eedc86f368fc2fa1c0c8c78f7d3c93"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be2e2812a43205728a06c9d0fd090432cd76a9bb5bff2bfcfdf8b0e27d51851"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0eb54b11cd4fe0c6404611eef77086ade03eb1457e92910bbb4f3479efa3f79"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_24_armv7l.whl", hash = "sha256:087ddbb754575618a8832ee4ab52fe7eb332f502e2a56088b53dbeb5c4efdf9f"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:b74906e01c7fc938ac889588ef438de812989817095c3c4904721f647d64a4d1"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_24_s390x.whl", hash = "sha256:60b7239206a2f61ad89c7518adfacb3ccd6662eaa07c5e437317aea2615a1f18"}, + {file = "pydantic_core-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:be3419204952bbe9b72b90008977379c52f99ae1c6e640488de4be783c345d71"}, + {file = "pydantic_core-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:804cf8f6a859620f8eb754c02f7770f61c3e9c519f8338c331d555b3d6976e3c"}, + {file = "pydantic_core-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cbba32fb14e199d0493c6b9c44870dab0a9c37af9f0f729068459d1849279ffd"}, + {file = "pydantic_core-2.1.2-cp39-none-win32.whl", hash = "sha256:6bf00f56a4468f5b03dadb672a5f1d24aea303d4ccffe8a0f548c9e36017edd3"}, + {file = "pydantic_core-2.1.2-cp39-none-win_amd64.whl", hash = "sha256:ac462a28218ea7d592c7ad51b517558f4ac6565a4e53db7a4811eeaf9c9660b0"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:047e782b9918f35ef534ced36f1fd2064f5581229b7a15e4d3177387a6b53134"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c0213891898fa5b404cf3edf4797e3ac7819a0708ea5473fc6432a2aa27c189"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0f481aaf0119f77b200e5a5e2799b3e14c015a317eaa948f42263908735cc9f"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15eb4cb543ed36f6a4f16e3bee7aa7ed1c3757be95a3f3bbb2b82b9887131e0f"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ef71e73a81a4cd7e87c93e8ff0170140fd93ba33b0f61e83da3f55f6e0a84fb4"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:840238c845b0f80777151fef0003088ab91c6f7b3467edaff4932b425c4e3c3f"}, + {file = "pydantic_core-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7648e48ba263ca0a8a2dc55a60a219c9133fb101ba52c89a14a29fb3d4322ca3"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:8eb4e2b71562375609c66a79f89acd4fe95c5cba23473d04952c8b14b6f908f5"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056afea59651c4e47ec6dadbb77ccae4742c059a3d12bc1c0e393d189d2970d"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46cd323371aa7e4053010ccdb94063a4273aa9e5dbe97f8a1147faa769de8d8d"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa39499625239da4ec960cf4fc66b023929b24cc77fb8520289cfdb3c1986428"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f5de2d4167fd4bc5ad205fb7297e25867b8e335ca08d64ed7a561d2955a2c32d"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:9a5fba9168fc27805553760fa8198db46eef83bf52b4e87ebbe1333b823d0e70"}, + {file = "pydantic_core-2.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e68a404fad8493989d6f07b7b9e066f1d2524d7cb64db2d4e9a84c920032c67f"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:1a5c4475510d1a9cc1458a26cfc21442223e52ce9adb640775c38739315d03c7"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0681472245ef182554208a25d16884c84f1c5a69f14e6169b88932e5da739a1c"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7fd334b40c5e13a97becfcaba314de0dcc6f7fe21ec8f992139bcc64700e9dc"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7345b1741bf66a9d8ed0ec291c3eabd534444e139e1ea6db5742ac9fd3be2530"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0855cf8b760fb40f97f0226cb527c8a94a2ab9d8179628beae20d6939aaeacb0"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d281a10837d98db997c0247f45d138522c91ce30cf3ae7a6afdb5e709707d360"}, + {file = "pydantic_core-2.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:82e09f27edab289187dd924d4d93f2a35f21aa969699b2504aa643da7fbfeff9"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:aa54902fa51f7d921ba80923cf1c7ff3dce796a7903300bd8824deb90e357744"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b9a5fc4058d64c9c826684dcdb43891c1b474a4a88dcf8dfc3e1fb5889496f8"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:817681d111cb65f07d46496eafec815f48e1aff37713b73135a0a9eb4d3610ab"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b5d37aedea5963f2097bddbcdb255483191646a52d40d8bb66d61c190fcac91"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f2de65752fff248319bcd3b29da24e205fa505607539fcd4acc4037355175b63"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:a8b9c2cc4c5f8169b943d24be4bd1548fe81c016d704126e3a3124a2fc164885"}, + {file = "pydantic_core-2.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f7bcdf70c8b6e70be11c78d3c00b80a24cccfb408128f23e91ec3019bed1ecc1"}, + {file = "pydantic_core-2.1.2.tar.gz", hash = "sha256:d2c790f0d928b672484eac4f5696dd0b78f3d6d148a641ea196eb49c0875e30a"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pydot" version = "1.4.2" @@ -908,14 +1590,14 @@ ujson = ["ujson"] [[package]] name = "pygithub" -version = "1.58.2" +version = "1.59.0" description = "Use the full Github API v3" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "PyGithub-1.58.2-py3-none-any.whl", hash = "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8"}, - {file = "PyGithub-1.58.2.tar.gz", hash = "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f"}, + {file = "PyGithub-1.59.0-py3-none-any.whl", hash = "sha256:126bdbae72087d8d038b113aab6b059b4553cb59348e3024bb1a1cae406ace9e"}, + {file = "PyGithub-1.59.0.tar.gz", hash = "sha256:6e05ff49bac3caa7d1d6177a10c6e55a3e20c85b92424cc198571fd0cf786690"}, ] [package.dependencies] @@ -993,14 +1675,14 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"}, + {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"}, ] [package.extras] @@ -1019,52 +1701,30 @@ files = [ ] [[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" +name = "pysnooper" +version = "1.1.1" +description = "A poor man's debugger for Python." category = "main" optional = false -python-versions = ">=3.7" +python-versions = "*" files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, + {file = "PySnooper-1.1.1-py2.py3-none-any.whl", hash = "sha256:378f13d731a3e04d3d0350e5f295bdd0f1b49fc8a8b8bf2067fe1e5290bd20be"}, + {file = "PySnooper-1.1.1.tar.gz", hash = "sha256:d17dc91cca1593c10230dce45e46b1d3ff0f8910f0c38e941edf6ba1260b3820"}, ] +[package.extras] +tests = ["pytest"] + [[package]] name = "pytest" -version = "7.3.1" +version = "7.4.0" description = "pytest: simple powerful testing with Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, - {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -1076,7 +1736,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-daemon" @@ -1114,6 +1774,96 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "referencing" +version = "0.29.1" +description = "JSON Referencing + Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.29.1-py3-none-any.whl", hash = "sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f"}, + {file = "referencing-0.29.1.tar.gz", hash = "sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "requests" version = "2.31.0" @@ -1136,6 +1886,106 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rpds-py" +version = "0.8.8" +description = "Python bindings to Rust's persistent data structures (rpds)" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.8.8-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:cea42c2f52e37877e6b877bce64d109a6b0213e32545ecc70d4492d2a4641b8f"}, + {file = "rpds_py-0.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b189640d59afa8aeff59865fa9d314bca97987c378950f215297e15d64ae1124"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87d74c2526115daa9d805a66377997602185a837ff7ecceed9d27e625c383572"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:db71c665fc7ddb9ac53d7b69dc588493c0b71635b28fc8ff64b31eb9db5b3461"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d6a26953d3b291dd7e79e43bb203ed134ca889e63c8ebbc65e3ff98154303ef"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3660bd2afb23e1ca685df0d3092208fe6c7b2cae8c0be199b3da6d1a4bc91dc5"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b5164fdad37847e90683d3748dca7c4604f47ecd21e2d651dafc80393d1d314"}, + {file = "rpds_py-0.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dfec14a64759186153115d987f9e60b1fa7e8e14a00004a02482e696199e554"}, + {file = "rpds_py-0.8.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d6696c2a002e982e89975063939a2579623d6d6b24634b147848ec9f35dad7d6"}, + {file = "rpds_py-0.8.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13aed64f2e0bef04a0eae6d1d1295f901f6c1640d1e20264dc3b19d62ef1721d"}, + {file = "rpds_py-0.8.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:316a66b0379a9e954872593aa2eb6d61949da2ecc8f572b4dafb07aa0e247171"}, + {file = "rpds_py-0.8.8-cp310-none-win32.whl", hash = "sha256:e4e11f71673905d9e8735b8dd4ef8fa85a82e6003851fe46f9bdc51aebc2cd5d"}, + {file = "rpds_py-0.8.8-cp310-none-win_amd64.whl", hash = "sha256:6b1b235b890373f785507f8f6a644a4f191b7195939e7f6108dc0e5e4fab57fd"}, + {file = "rpds_py-0.8.8-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:d4334405f6c73c29ff94521f78ad53ebb76a9c1b8dafea75852f9f64c3679cf7"}, + {file = "rpds_py-0.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df2ae878fd99342415a42659f3bcee34b12441a509033e0ab04c6e301895607"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2f8666fde7cfd9cdbc6c223876b39697d387f0215d12ed25147e9efec2dff5a"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ea8c4a1232c7bacf73366b0490dda7f67d25958aec1c2f099b6753c8bfe84427"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5cbcbd6451a4af2048fc0b21c15981462f6a378cb039aa53612c6e39958064e"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d418d2fd8c0fffe2897bc3e15a2e2ec87abf29076f0c36898cc33fb7881c2cbe"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97e4cbe722474d17c309ee49e09331ceffe345bb72e2b10c6c740788871b122"}, + {file = "rpds_py-0.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f60a7eb96fedcc5bf59761d33ac0f2f127d75f8c4b99ed0f138fc0f3601c537"}, + {file = "rpds_py-0.8.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b3ed0d3498b69159db0d5db1393c8bae4df51cf936b2ef5cda53d800acab0019"}, + {file = "rpds_py-0.8.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22afed13c6ad4ccdc650ad44cbc06f835f4f30de201bd4ee2afc09bde06a357a"}, + {file = "rpds_py-0.8.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:78c5577f99d2edc9eed9ec39fae27b73d04d1b2462aff6f6b11207e0364fc40d"}, + {file = "rpds_py-0.8.8-cp311-none-win32.whl", hash = "sha256:42eb3030665ee7a5c03fd4db6b8db1983aa91bcdffbed0f4687751deb2a94a7c"}, + {file = "rpds_py-0.8.8-cp311-none-win_amd64.whl", hash = "sha256:7110854662ccf8db84b90e4624301ef5311cafff7e5f2a63f2d7cc0fc1a75b60"}, + {file = "rpds_py-0.8.8-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:d7e46f52272ceecc42c05ad869b068b2dbfb6eb5643bcccecd2327d3cded5a2e"}, + {file = "rpds_py-0.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7628b2080538faa4a1243b0002678cae7111af68ae7b5aa6cd8526762cace868"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657348b35a4c2e7c2340bf0bc37597900037bd87e9db7e6282711aaa77256e16"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ac1e47ee4cb2dbd714537e63c67086eec63f56b13208fe450ae5be4f3d65671"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cafbfa8f3a27e592bdcc420497e0c9a957c9f812b6c6ebfb7f961409215ba82d"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9af40bb89e40932e04c0cc1fb516249d6b3ae68ceebd984fdc592a6673244e50"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b7c87503843a036f898d44c47326a117d23b6269a9f1574adf83d7bb051b839"}, + {file = "rpds_py-0.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0fe018430e5e8e1d8b513bcbccdb0ea34b9fd81c32b3a49c41a109fade17cfb"}, + {file = "rpds_py-0.8.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c7019b2522af6b835118177b6b53f7ed08da28061aa5d44e06286be09799e7a4"}, + {file = "rpds_py-0.8.8-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ac596301c7723809ecb6ec4cb2564b2cadc06f8c07b6348a56fcbf1ae043d751"}, + {file = "rpds_py-0.8.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f8a1cc37e2395002381510a6862c29634acd67edfe5774661a6c48d8617acae7"}, + {file = "rpds_py-0.8.8-cp38-none-win32.whl", hash = "sha256:e261fa453ad50fe1d9287fa21d962cdbcd3d495cf1160dd0f893883040c455b6"}, + {file = "rpds_py-0.8.8-cp38-none-win_amd64.whl", hash = "sha256:e1700fba17dd63c9c7d5cb03cf838db23cf938dd5cdb1eecb6ba8b8da62c3e73"}, + {file = "rpds_py-0.8.8-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:25a4b357ba7540d7cc709915699d67d505c8177cdb30824127092e1b4886b504"}, + {file = "rpds_py-0.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f81a570a20f9fce617d728f4e3bdc05bfbb68afa2e795ec0c52544a7923de517"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:246a410e540ce7f635c6ad1b7aa00b7dcfc966c5f97217e41092c3f764dac4bf"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfe98ad05400e7ac7a1df791645db08c66adc92d7a6449a406111303a265b71a"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddb5226b11f4fce98c6e47c07819fbbfdda6d3fd529cd176ad8a1e0b98a70b05"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ee396f63a1f540fb3aecb8cc698180d30573a661be47fb3fff45cbd2b5d4686"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e85ea159f2d2132d4fcb71abb7df9683314f6073bf8ee9f9bd576440245e59c"}, + {file = "rpds_py-0.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed823997c3300b541da0fcc9eee8fbe6740e07939ffa432824cfca287472d652"}, + {file = "rpds_py-0.8.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4333b5c2801e44bf342207a7700378a1013f300116c9553ce1ffbc73047d2a02"}, + {file = "rpds_py-0.8.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:681ef7a21e6990583533c3a3038b7176f5e51e5d345fe2d9109b54f6bffcabcd"}, + {file = "rpds_py-0.8.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1891903e567d728175c0475a1f0ffc1d1580013b0b265b9e2f1b8c93d58b2d05"}, + {file = "rpds_py-0.8.8-cp39-none-win32.whl", hash = "sha256:ee42ce4ef46ea334ce8ab63d5a57c7fd78238c9c7293b3caa6dfedf11bd28773"}, + {file = "rpds_py-0.8.8-cp39-none-win_amd64.whl", hash = "sha256:0e8da63b9baa154ec9ddd6dd397893830d17e5812ceb50edbae8122d8ecb9f2e"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:f1c84912d77b01651488bbe392df593b4c5852e213477e268ebbb7c799059d78"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:180963bb3e1fcc6ed6313ece5e065f0df4021a7eb7016084d3cbc90cd2a8af3e"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e1251d6690f356a305192089017da83999cded1d7e2405660d14c1dff976af7"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:36266e2e49b36ec6cc148e36667030d8e7f1c009edd2ca978ab09ed9c5a7589a"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bd8dbc1c63668124e5e48e601d32f1053cfd5a86004ae0e55dc9ba8b1e7de29"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c62fdb01111da948e8446caaefebf2ca4307a58fcbc10039b48d0db7205397c"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79ac819182795a2168ed11075c7362de368f360244fb7cea8274c222b2d55365"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b949e86affe17c8828d82936c51d7aa9b686511f9ac99a4b1de596d7140c8083"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:fffd98c1fd6b38df35e471549c2486d826af0fda6ca55c0bbbb956b291e7f2ae"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b331fa451d725258c1ad0ae6816cf36d55294e5cb68338cf91550b9a448a48f"}, + {file = "rpds_py-0.8.8-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:18a97bb7f211b247346983092186927c517153ac155c611f43ca83d5ee93a3e2"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:df3097abf5fd09bfcd8f6fd02d052b25cc3e160b3ee71b6fbd831b2cd516c958"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:961828c668140796c4963edb14cd968666d5414b9b5829997a4f475fd917906e"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a55fd01f61df19e4f53fd67b63ca9bf47559632c3f7d4037faa06d3a6fed54"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f64ef5700ff8fded62b12d1ea55463031cc5a353b670ed7146126c6cbf28788"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a747477838a90b9264f434b5399309f9badb32c80ff3e9c4f6d5b87fddcbaa09"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358c7a976482537d26fcbdc7808e7cc25f64816fe89681f9aa8bef13e16c7370"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e086610118163400a1822af0ee857581c0e047aa50a9c3543d17fbe65183a339"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:755a837fb7053dbf511fba26343423bd80d3b75a5d7f57f6e407c2fe5ae46682"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:247a1fd9bcdb373380cb8c0041417c9995fc163c9d88a39f5ec3d960114aca22"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:c26b1a0425c038cc23cf5770a47d7a7382fe68d6d10fb2a52c2896ca94e72550"}, + {file = "rpds_py-0.8.8-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4c66a5f9ca9c5fcb2527ad969541521f7216db713a7bd63aee52c3f5efa5924a"}, + {file = "rpds_py-0.8.8.tar.gz", hash = "sha256:300b8579740b06e246238b730e636f314a7d8dc475be1868650f5d3ddc29a0d8"}, +] + [[package]] name = "rsa" version = "4.9" @@ -1151,6 +2001,72 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "ruamel-yaml" +version = "0.17.32" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +category = "main" +optional = false +python-versions = ">=3" +files = [ + {file = "ruamel.yaml-0.17.32-py3-none-any.whl", hash = "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447"}, + {file = "ruamel.yaml-0.17.32.tar.gz", hash = "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} + +[package.extras] +docs = ["ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.7" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, + {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, + {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, + {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, + {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, + {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, + {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, +] + [[package]] name = "s3transfer" version = "0.6.1" @@ -1171,14 +2087,14 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] @@ -1336,7 +2252,7 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1393,6 +2309,18 @@ files = [ doc = ["sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] test = ["mypy", "pytest", "typing-extensions"] +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + [[package]] name = "urllib3" version = "1.26.16" @@ -1412,14 +2340,14 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "websocket-client" -version = "1.5.2" +version = "1.6.1" description = "WebSocket client for Python with low level API options" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "websocket-client-1.5.2.tar.gz", hash = "sha256:c7d67c13b928645f259d9b847ab5b57fd2d127213ca41ebd880de1f553b7c23b"}, - {file = "websocket_client-1.5.2-py3-none-any.whl", hash = "sha256:f8c64e28cd700e7ba1f04350d66422b6833b82a796b525a51e740b8cc8dab4b1"}, + {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, + {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, ] [package.extras] @@ -1531,4 +2459,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = ">=3.8,<4" -content-hash = "bd041a2e78cdf27f5fe1543e8f6c9a7d08df15a0472fbfc37395e0cac185fea1" +content-hash = "6cf4070a0a8c1c575c244949c8a65becb5e678e9d17568f389c7b4a9e8b36cb5" diff --git a/pyproject.toml b/pyproject.toml index 43919deb0..2c3a9618f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,9 +18,9 @@ keywords = ['exasol', 'udf', 'script-languages'] [tool.poetry.dependencies] python = ">=3.8,<4" -exasol-script-languages-container-tool = "^0.17.0" -exasol-script-languages-container-ci = "^1.1.0" -exasol-script-languages-container-ci-setup = "^1.0.0" +exasol-script-languages-container-tool = "^0.18.0" +exasol-script-languages-container-ci = "^1.3.0" +exasol-script-languages-container-ci-setup = "^1.2.0" [tool.poetry.dev-dependencies] toml = ">=0.10.2" diff --git a/test_container/tests/lang/python/basic.sql b/test_container/tests/lang/python/basic.sql deleted file mode 100644 index ca4511681..000000000 --- a/test_container/tests/lang/python/basic.sql +++ /dev/null @@ -1,102 +0,0 @@ ---CREATE SCALAR SCRIPT ---base_pi() ---RETURNS DOUBLE AS - --- pi - -CREATE python SCALAR SCRIPT -basic_emit_several_groups(a INTEGER, b INTEGER) -EMITS (i INTEGER, j VARCHAR(40)) AS -def run(ctx): - for n in range(ctx.a): - for i in range(ctx.b): - ctx.emit(i, repr((exa.meta.vm_id, exa.meta.node_count, exa.meta.node_id))) -/ - -CREATE python SET SCRIPT -basic_test_reset(i INTEGER, j VARCHAR(40)) -EMITS (k INTEGER) AS -def run(ctx): - ctx.emit(ctx.i) - ctx.next() - ctx.emit(ctx.i) - ctx.reset() - ctx.emit(ctx.i) - ctx.next() - ctx.emit(ctx.i) -/ - -CREATE python SCALAR SCRIPT -basic_emit_two_ints() -EMITS (i INTEGER, j INTEGER) AS -def run(ctx): - ctx.emit(1,2) -/ - -CREATE python SCALAR SCRIPT -basic_nth_partial_sum(n INTEGER) -RETURNS INTEGER as - -def run(ctx): - if ctx.n is not None: - return ctx.n * (ctx.n + 1) / 2 - return 0 -/ - - -CREATE python SCALAR SCRIPT -basic_range(n INTEGER) -EMITS (n INTEGER) AS - -def run(ctx): - if ctx.n is not None: - for i in range(ctx.n): - ctx.emit(i) -/ - -CREATE python SET SCRIPT -basic_sum(x INTEGER) -RETURNS INTEGER AS - -def run(ctx): - s = 0 - while True: - if ctx.x is not None: - s += ctx.x - if not ctx.next(): - break - return s -/ - -CREATE python SET SCRIPT -basic_sum_grp(x INTEGER) -EMITS (s INTEGER) AS - -def run(ctx): - s = 0 - while True: - if ctx.x is not None: - s += ctx.x - if not ctx.next(): - break - ctx.emit(s) -/ - - -CREATE python SET SCRIPT -set_returns_has_empty_input(a double) RETURNS boolean AS - -def run(ctx): - return bool(ctx.x is None) -/ - -CREATE python SET SCRIPT -set_emits_has_empty_input(a double) EMITS (x double, y varchar(10)) AS -def run(ctx): - if ctx.x is None: - ctx.emit(1,'1') - else: - ctx.emit(2,'2') -/ - --- vim: ts=4:sts=4:sw=4 diff --git a/test_container/tests/lang/python/cologne_phonetic.sql b/test_container/tests/lang/python/cologne_phonetic.sql deleted file mode 100644 index b88e55ea1..000000000 --- a/test_container/tests/lang/python/cologne_phonetic.sql +++ /dev/null @@ -1,124 +0,0 @@ -CREATE python SCALAR SCRIPT -cologne_phonetic(word VARCHAR(200)) -RETURNS VARCHAR(200) AS - -import string - -def nicht_vor(x): - def context_handler(word, pos, length): - if pos == length-1: - return True - if pos < length-1: - if all([word[pos+1] != c for c in x]): - return True - return False - return context_handler - -def vor(x): - def context_handler(word, pos, length): - if pos < length-1: - if any([word[pos+1] == c for c in x]): - return True - return False - return context_handler - -def vor_ausser_nach(x,y): - def context_handler(word, pos, length): - if pos < length-1: - if any([word[pos+1] == c for c in x]): - if all([word[pos-1] != c for c in y]): - return True - return False - return context_handler - -def nicht_nach(x): - def context_handler(word, pos, length): - if pos > 0: - if all([word[pos-1] != c for c in x]): - return True - return False - return context_handler - -def nach(x): - def context_handler(word, pos, length): - if pos > 0: - if any([word[pos-1] == c for c in x]): - return True - return False - return context_handler - -def im_anlaut_vor(x): - def context_handler(word, pos, length): - if pos == 1: - if any([word[0] == c for c in x]): - return True - return False - return context_handler - -def im_anlaut_ausser_vor(x): - def context_handler(word, pos, length): - if pos == 1: - if all([word[0] != c for c in x]): - return True - return False - return context_handler - -RULES = [ - ('a', '0'), - ('e', '0'), - ('i', '0'), - ('j', '0'), - ('o', '0'), - ('u', '0'), - ('y', '0'), - (u'ö', '0'), - (u'ä', '0'), - (u'ü', '0'), - (u'ß', '0'), - ('h', '-'), - ('b', '1'), - ('p', '1', [nicht_vor('h')]), - ('d', '2', [nicht_vor('csz')]), - ('t', '2', [nicht_vor('csz')]), - ('f', '3'), - ('v', '3'), - ('w', '3'), - ('p', '3', [vor('h')]), - ('g', '4'), - ('k', '4'), - ('q', '4'), - ('c', '4', [im_anlaut_vor('ahkloqrux'), vor_ausser_nach('ahkoqux','sz')]), - ('x', '48', [nicht_nach('ckq')]), - ('l', '5'), - ('m' '6'), - ('n' '6'), - ('r', '7'), - ('s' '8'), - ('z' '8'), - ('c', '8', [nach('sz'), im_anlaut_ausser_vor('ahkloqrux'), nicht_vor('ahkoqux')]), - ('d', '8', [vor('csz')]), - ('t', '8', [vor('csz')]), - ('x', '8', [nach('ckq')])] - -def encode(word, pos, length): - for rule in RULES: - if word[pos] == rule[0]: - if len(rule) == 2: - return rule[1] - elif any([ctx(word,pos,length) for ctx in rule[2]]): - return rule[1] - raise Exception('no match for "%s" in "%s" at pos %d' % (word[pos], word, pos)) - -valid_characters = string.lowercase + u'äöüß' - -def run(ctx): - if ctx.word is not None: - word = filter(lambda c: c in valid_characters, ctx.word.lower()) - l = len(word) - code = [] - for i in range(l): - c = encode(word, i, l) - if (i == 0 and c != '-') or (len(code) > 0 and c not in ['0', '-'] and c != code[-1]): - code.append(c) - return ''.join(code) -/ diff --git a/test_container/tests/lang/python/combinations.sql b/test_container/tests/lang/python/combinations.sql deleted file mode 100644 index 703ce4208..000000000 --- a/test_container/tests/lang/python/combinations.sql +++ /dev/null @@ -1,41 +0,0 @@ -create python set script -SET_RETURNS(x double, y double) -returns double as - -def run(ctx): - acc = 0.0 - while True: - acc = acc + ctx.x + ctx.y - if not ctx.next(): break - return acc -/ - - -create python set script -SET_EMITS(x double, y double) -emits (x double, y double) as - -def run(ctx): - while True: - ctx.emit(ctx.y, ctx.x) - if not ctx.next(): break -/ - - -create python scalar script -SCALAR_RETURNS(x double, y double) -returns double as - -def run(ctx): - return ctx.x + ctx.y -/ - - -create python scalar script -SCALAR_EMITS(x double, y double) -emits (x double, y double) as - -def run(ctx): - for i in range(int(ctx.x), int(ctx.y+1)): - ctx.emit(float(i), float(i * i)) -/ diff --git a/test_container/tests/lang/python/dynamic_input.sql b/test_container/tests/lang/python/dynamic_input.sql deleted file mode 100644 index 224dc7937..000000000 --- a/test_container/tests/lang/python/dynamic_input.sql +++ /dev/null @@ -1,110 +0,0 @@ -CREATE PYTHON SCALAR SCRIPT -metadata_scalar_emit (...) -EMITS("v" VARCHAR(2000)) AS -def run(ctx): - ctx.emit(repr(exa.meta.input_column_count)) - for i in range (0,exa.meta.input_column_count): - ctx.emit(exa.meta.input_columns[i].name) - ctx.emit(repr(exa.meta.input_columns[i].type)) - ctx.emit(exa.meta.input_columns[i].sql_type) - ctx.emit(repr(exa.meta.input_columns[i].precision)) - ctx.emit(repr(exa.meta.input_columns[i].scale)) - ctx.emit(repr(exa.meta.input_columns[i].length)) -/ - -CREATE PYTHON SCALAR SCRIPT -metadata_scalar_return (...) -RETURNS VARCHAR(2000) AS -def run(ctx): - return repr(exa.meta.input_column_count) -/ - -CREATE PYTHON SCALAR SCRIPT -basic_scalar_emit( ... ) -EMITS ("v" VARCHAR(2000)) as -def run(ctx): - i = 0 - while i < exa.meta.input_column_count: - ctx.emit(repr(ctx[i])) - i = i + 1 -/ - -CREATE PYTHON SCALAR SCRIPT -basic_scalar_return( ... ) -RETURNS VARCHAR(2000) as -def run(ctx): - return repr(ctx[exa.meta.input_column_count-1]) -/ - -CREATE PYTHON SET SCRIPT -basic_set_emit( ... ) -EMITS ("v" VARCHAR(2000)) as -def run(ctx): - var = 'result: ' - while True: - for i in range (0,exa.meta.input_column_count): - ctx.emit(repr(ctx[i])) - var = var + repr(ctx[i]) + ' , ' - if not ctx.next(): break - ctx.emit(var) -/ - -CREATE PYTHON SET SCRIPT -basic_set_return( ... ) -RETURNS VARCHAR(2000) as -def run(ctx): - var = 'result: ' - while True: - for i in range (0,exa.meta.input_column_count): - var = var + repr(ctx[i]) + ' , ' - if not ctx.next(): break - return var -/ - -CREATE PYTHON SET SCRIPT -type_specific_add(...) -RETURNS VARCHAR(2000) as -def run(ctx): - var = 'result: ' - if repr(exa.meta.input_columns[0].type) == "" or repr(exa.meta.input_columns[0].type) == "": - while True: - for i in range (0,exa.meta.input_column_count): - var = var + ctx[i] + ' , ' - if not ctx.next(): break - else: - sum = 0 - while True: - for i in range (0,exa.meta.input_column_count): - sum = sum + ctx[i] - if not ctx.next(): break - var = var + repr(sum) - return var -/ - -CREATE PYTHON SCALAR SCRIPT -wrong_arg(...) -returns varchar(2000) as -def run(ctx): - return ctx[1] -/ - -CREATE PYTHON SCALAR SCRIPT -wrong_operation(...) -returns varchar(2000) as -def run(ctx): - return ctx[0] * ctx[1] -/ - -CREATE PYTHON SET SCRIPT -empty_set_returns( ... ) -returns varchar(2000) as -def run(ctx): - return 1 -/ - -CREATE PYTHON SET SCRIPT -empty_set_emits( ... ) -emits (x varchar(2000)) as -def run(ctx): - return 1 -/ diff --git a/test_container/tests/lang/python/dynamic_output.sql b/test_container/tests/lang/python/dynamic_output.sql deleted file mode 100644 index d76263f47..000000000 --- a/test_container/tests/lang/python/dynamic_output.sql +++ /dev/null @@ -1,179 +0,0 @@ --- -CREATE PYTHON SET SCRIPT VAREMIT_SIMPLE_SET (a double) EMITS (...) AS -def run(ctx): - ctx.emit(1) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_SIMPLE_SET (a double) EMITS (...) AS -def run(ctx): - ctx.emit(1) -def default_output_columns(): - return "x double" -/ --- -CREATE PYTHON SCALAR SCRIPT VAREMIT_SIMPLE_SCALAR (a double) EMITS (...) AS -def run(ctx): - ctx.emit(1) -/ -CREATE PYTHON SCALAR SCRIPT DEFAULT_VAREMIT_SIMPLE_SCALAR (a double) EMITS (...) AS -def run(ctx): - ctx.emit(1) -def default_output_columns(): - return "x double" -/ --- -CREATE PYTHON SCALAR SCRIPT VAREMIT_SIMPLE_ALL_DYN (...) EMITS (...) AS -def run(ctx): - ctx.emit(1) -/ -CREATE PYTHON SCALAR SCRIPT DEFAULT_VAREMIT_SIMPLE_ALL_DYN (...) EMITS (...) AS -def run(ctx): - ctx.emit(1) -def default_output_columns(): - return "x double" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_SIMPLE_SYNTAX_VAR (...) EMITS ( ... ) AS -def run(ctx): - ctx.emit(1) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_SIMPLE_SYNTAX_VAR (...) EMITS ( ... ) AS -def run(ctx): - ctx.emit(1) -def default_output_columns(): - return "x double" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_GENERIC_EMIT (a varchar(100)) EMITS (...) AS -def run(ctx): - ctx.emit(*([ctx[0]]*exa.meta.output_column_count)) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_GENERIC_EMIT (a varchar(100)) EMITS (...) AS -def run(ctx): - ctx.emit(*([ctx[0]]*exa.meta.output_column_count)) -def default_output_columns(): - return "a varchar(100)" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_ALL_GENERIC (...) EMITS (...) AS -def run(ctx): - ctx.emit(*([ctx[0]]*exa.meta.output_column_count)) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_ALL_GENERIC (...) EMITS (...) AS -def run(ctx): - ctx.emit(*([ctx[0]]*exa.meta.output_column_count)) -def default_output_columns(): - return "a varchar(100)" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_METADATA_SET_EMIT (...) EMITS(...) AS -def run(ctx): - ctx.emit(repr(exa.meta.output_column_count), 1) - for i in range (0,exa.meta.output_column_count): - ctx.emit(exa.meta.output_columns[i].name, 1) - ctx.emit(repr(exa.meta.output_columns[i].type), 1) - ctx.emit(exa.meta.output_columns[i].sql_type, 1) - ctx.emit(repr(exa.meta.output_columns[i].precision), 1) - ctx.emit(repr(exa.meta.output_columns[i].scale), 1) - ctx.emit(repr(exa.meta.output_columns[i].length), 1) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_METADATA_SET_EMIT (...) EMITS(...) AS -def run(ctx): - ctx.emit(repr(exa.meta.output_column_count), 1) - for i in range (0,exa.meta.output_column_count): - ctx.emit(exa.meta.output_columns[i].name, 1) - ctx.emit(repr(exa.meta.output_columns[i].type), 1) - ctx.emit(exa.meta.output_columns[i].sql_type, 1) - ctx.emit(repr(exa.meta.output_columns[i].precision), 1) - ctx.emit(repr(exa.meta.output_columns[i].scale), 1) - ctx.emit(repr(exa.meta.output_columns[i].length), 1) -def default_output_columns(): - return "a varchar(123), b double" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_NON_VAR_EMIT (...) EMITS (a double) AS -def run(ctx): - ctx.emit(1) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_NON_VAR_EMIT (...) EMITS (a double) AS -def run(ctx): - ctx.emit(1) -def default_output_columns(): - return "a int" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_SIMPLE_RETURNS (a int) RETURNS int AS -def run(ctx): - return 1 -def default_output_columns(): - return "x double" -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_SIMPLE_RETURNS (a int) RETURNS int AS -def run(ctx): - return 1 -def default_output_columns(): - return "a int" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_EMIT_INPUT (...) EMITS (...) AS -def run(ctx): - record = list() - for col in range(0,exa.meta.input_column_count): - record.append(ctx[col]) - ctx.emit(*record) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_EMIT_INPUT (...) EMITS (...) AS -def run(ctx): - record = list() - for col in range(0,exa.meta.input_column_count): - record.append(ctx[col]) - ctx.emit(*record) -def default_output_columns(): - return "a int" -/ --- -CREATE PYTHON SET SCRIPT VAREMIT_EMIT_INPUT_WITH_META_CHECK (...) EMITS (...) AS -def run(ctx): - record = list() - for col in range(0,exa.meta.input_column_count): - assert exa.meta.input_columns[col].sql_type == exa.meta.output_columns[col].sql_type - record.append(ctx[col]) - ctx.emit(*record) -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_EMIT_INPUT_WITH_META_CHECK (...) EMITS (...) AS -def run(ctx): - record = list() - for col in range(0,exa.meta.input_column_count): - assert exa.meta.input_columns[col].sql_type == exa.meta.output_columns[col].sql_type - record.append(ctx[col]) - ctx.emit(*record) -def default_output_columns(): - return "a varchar(123), b double" -/ -CREATE PYTHON SET SCRIPT DEFAULT_VAREMIT_EMPTY_DEF(X DOUBLE) EMITS (...) AS -def run(ctx): - ctx.emit(1.4) - -def default_output_columns(): - return '' -/ - -CREATE PYTHON SET SCRIPT COPY_RELATION (...) EMITS (...) AS -def run(ctx): - record = list() - for col in range(0,exa.meta.input_column_count): - assert exa.meta.input_columns[col].sql_type == exa.meta.output_columns[col].sql_type - record.append(ctx[col]) - ctx.emit(*record) - -def default_output_columns(): - res = list() - for col in range(0,exa.meta.input_column_count): - col_name = exa.meta.input_columns[col].name - try: - col_name = "col_%s" % (int(col_name)) - except ValueError: pass - res.append("%s %s" % (col_name, exa.meta.input_columns[col].sql_type)) - return ",".join(res) -/ - - diff --git a/test_container/tests/lang/python/emit.sql b/test_container/tests/lang/python/emit.sql deleted file mode 100644 index ef3a56b66..000000000 --- a/test_container/tests/lang/python/emit.sql +++ /dev/null @@ -1,26 +0,0 @@ -create python scalar script dob_1i_1o(x double) emits(y double) -as - def run(ctx): - ctx.emit(ctx.x) - ctx.emit(ctx.x) -/ -create python scalar script line_1i_1o(x double) emits(y double) -as - def run(ctx): - ctx.emit(ctx.x) -/ -create python scalar script line_1i_2o(x double) emits(y double, z double) -as - def run(ctx): - ctx.emit(ctx.x, ctx.x) -/ -create python scalar script line_2i_1o(x double, y double) emits(z double) -as - def run(ctx): - ctx.emit(ctx.x + ctx.y) -/ -create python scalar script line_3i_2o(x double, y double, z double) emits(z1 double, z2 double) -as - def run(ctx): - ctx.emit(ctx.x + ctx.y, 3000) -/ diff --git a/test_container/tests/lang/python/export_alias.sql b/test_container/tests/lang/python/export_alias.sql deleted file mode 100644 index e46e5b473..000000000 --- a/test_container/tests/lang/python/export_alias.sql +++ /dev/null @@ -1,141 +0,0 @@ -create or replace python scalar script expal_test_pass_fail(res varchar(100)) emits (x int) as -def run(ctx): - result = ctx.res - if result == "ok": - ctx.emit(1) - elif result == "failed": - ctx.emit(2) - else: - ctx.emit(3) -/ - -create or replace python scalar script expal_use_param_foo_bar(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"T"."A"' and - export_spec.source_column_names[1] == '"T"."Z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_connection_name(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name == 'FOOCONN' and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"T"."A"' and - export_spec.source_column_names[1] == '"T"."Z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_connection_info(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection.type == 'password'and - export_spec.connection.address == 'a' and - export_spec.connection.user == 'b' and - export_spec.connection.password == 'c' and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"T"."A"' and - export_spec.source_column_names[1] == '"T"."Z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_has_truncate(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is True and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"T"."A"' and - export_spec.source_column_names[1] == '"T"."Z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_replace_created_by(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is True and - export_spec.created_by == 'create table t(a int, z varchar(3000))' and - export_spec.source_column_names[0] == '"T"."A"' and - export_spec.source_column_names[1] == '"T"."Z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_column_name_lower_case(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"tl"."A"' and - export_spec.source_column_names[1] == '"tl"."z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_column_selection(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"tl"."A"' and - export_spec.source_column_names[1] == '"tl"."z"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ - -create or replace python scalar script expal_use_query(...) returns int as -def generate_sql_for_export_spec(export_spec): - if (export_spec.parameters['FOO'] == 'bar' and - export_spec.parameters['BAR'] == 'foo' and - export_spec.connection_name is None and - export_spec.connection is None and - export_spec.has_truncate is False and - export_spec.has_replace is False and - export_spec.created_by is None and - export_spec.source_column_names[0] == '"col1"' and - export_spec.source_column_names[1] == '"col2"'): - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('ok')" - else: - return "select " + exa.meta.script_schema + ".expal_test_pass_fail('failed')" -/ diff --git a/test_container/tests/lang/python/get_connection.sql b/test_container/tests/lang/python/get_connection.sql deleted file mode 100644 index 9583e1ba1..000000000 --- a/test_container/tests/lang/python/get_connection.sql +++ /dev/null @@ -1,16 +0,0 @@ -create or replace python scalar script print_connection(conn varchar (1000)) -emits(type varchar(200), addr varchar(2000000), usr varchar(2000000), pwd varchar(2000000)) -as -def run(ctx): - c = exa.get_connection(ctx.conn) - ctx.emit( c.type, c.address, c.user, c.password ) -/ - - -create or replace python set script print_connection_set_emits(conn varchar (1000)) -emits(type varchar(200), addr varchar(2000000), usr varchar(2000000), pwd varchar(2000000)) -as -def run(ctx): - c = exa.get_connection(ctx.conn) - ctx.emit( c.type, c.address, c.user, c.password ) -/ diff --git a/test_container/tests/lang/python/import_alias.sql b/test_container/tests/lang/python/import_alias.sql deleted file mode 100644 index 0d3e6e3b0..000000000 --- a/test_container/tests/lang/python/import_alias.sql +++ /dev/null @@ -1,48 +0,0 @@ -create or replace python set script impal_use_is_subselect(...) emits (x varchar(2000)) as -def generate_sql_for_import_spec(import_spec): - return "select " + str(import_spec.is_subselect) -/ - -create or replace python scalar script impal_use_param_foo_bar(...) returns varchar(2000) as -def generate_sql_for_import_spec(import_spec): - return "select '" + import_spec.parameters['FOO'] + "', '" + import_spec.parameters['BAR'] + "'" -/ - -create or replace python set script impal_use_connection_name(...) emits (x varchar(2000)) as -def generate_sql_for_import_spec(import_spec): - return "select '" + import_spec.connection_name + "'" -/ - - -create or replace python set script impal_use_connection(...) emits (x varchar(2000)) as -def generate_sql_for_import_spec(import_spec): - return "select '" + import_spec.connection.user + import_spec.connection.password + import_spec.connection.address + import_spec.connection.type + "'" -/ - --- create or replace python set script impal_use_connection_fooconn(...) emits (x varchar(2000)) as --- def generate_sql_for_import_spec(import_spec): --- c = exa.get_connection('FOOCONN') --- return "select '" + str(c.address) + str(c.user) + str(c.password) + "'" --- / - - -create or replace python set script impal_use_all(...) emits (x varchar(2000)) as -def generate_sql_for_import_spec(import_spec): - is_sub = str(import_spec.is_subselect).upper() - connection_string = 'X' - connection_name = 'Y' - foo = 'Z' - types = 'T' - names = 'N' - if import_spec.connection is not None: - connection_string = import_spec.connection.user + import_spec.connection.password + import_spec.connection.address + import_spec.connection.type - if import_spec.connection_name is not None: - connection_name = import_spec.connection_name - if import_spec.parameters['FOO'] is not None: - foo = import_spec.parameters['FOO'] - if import_spec.subselect_column_types is not None: - for i in range(0, len(import_spec.subselect_column_types)): - types = types + import_spec.subselect_column_types[i] - names = names + import_spec.subselect_column_names[i] - return "select 1, '" + is_sub + '_' + connection_name + '_' + connection_string + '_' + foo + '_' + types + '_' + names + "'" -/ diff --git a/test_container/tests/lang/python/metadata.sql b/test_container/tests/lang/python/metadata.sql deleted file mode 100644 index 562cb6196..000000000 --- a/test_container/tests/lang/python/metadata.sql +++ /dev/null @@ -1,195 +0,0 @@ -CREATE PYTHON SCALAR SCRIPT -get_database_name() returns varchar(300) AS -def run(ctx): - return exa.meta.database_name -/ -create python scalar script -get_database_version() returns varchar(20) as -def run(ctx): - return exa.meta.database_version -/ -create python scalar script -get_script_language() emits (s1 varchar(300), s2 varchar(300)) as -def run(ctx): - ctx.emit(exa.meta.script_language, "Python") -/ -create python scalar script -get_script_name() returns varchar(200) as -def run(ctx): - return exa.meta.script_name -/ -create python scalar script -get_script_schema() returns varchar(200) as -def run(ctx): - return exa.meta.script_schema -/ -create python scalar script -get_current_user() returns varchar(200) as -def run(ctx): - return exa.meta.current_user -/ -create python scalar script -get_scope_user() returns varchar(200) as -def run(ctx): - return exa.meta.scope_user -/ -create python scalar script -get_current_schema() returns varchar(200) as -def run(ctx): - return exa.meta.current_schema -/ -create python scalar script -get_script_code() returns varchar(2000) as -def run(ctx): - return exa.meta.script_code -/ -create python scalar script -get_session_id() returns varchar(200) as -def run(ctx): - return exa.meta.session_id -/ -create python scalar script -get_statement_id() returns number as -def run(ctx): - return exa.meta.statement_id -/ -create python scalar script -get_node_count() returns number as -def run(ctx): - return exa.meta.node_count -/ -create python scalar script -get_node_id() returns number as -def run(ctx): - return exa.meta.node_id -/ -create python scalar script -get_vm_id() returns varchar(200) as -def run(ctx): - return exa.meta.vm_id -/ -create python scalar script -get_input_type_scalar() returns varchar(200) as -def run(ctx): - return exa.meta.input_type -/ -create python set script -get_input_type_set(a double) returns varchar(200) as -def run(ctx): - return exa.meta.input_type -/ -create python scalar script -get_input_column_count_scalar(c1 double, c2 varchar(100)) -returns number as -def run(ctx): - return exa.meta.input_column_count -/ -create python set script -get_input_column_count_set(c1 double, c2 varchar(100)) -returns number as -def run(ctx): - return exa.meta.input_column_count -/ -create python scalar script -get_input_columns(c1 double, c2 varchar(200)) -emits (column_id number, column_name varchar(200), column_type varchar(20), - column_sql_type varchar(20), column_precision number, column_scale number, - column_length number) as -def run(ctx): - cols = exa.meta.input_columns - for i in range(0, len(cols)): - name = cols[i].name - precision = cols[i].precision - thetype = repr(cols[i].type) - sql_type = cols[i].sql_type - scale = cols[i].scale - length = cols[i].length - if name == None: name = 'no-name' - if thetype == None: thetype = 'no-type' - if sql_type == None: sql_type = 'no-sql-type' - if precision == None: precision = 0 - if scale == None: scale = 0 - if length == None: length = 0 - ctx.emit(i+1, name, thetype, sql_type, precision, scale, length) -/ -create python scalar script -get_output_type_return() -returns varchar(200) as -def run(ctx): - return exa.meta.output_type -/ -create python scalar script -get_output_type_emit() -emits (t varchar(200)) as -def run(ctx): - ctx.emit(exa.meta.output_type) -/ -create python scalar script -get_output_column_count_return() -returns number as -def run(ctx): - return exa.meta.output_column_count -/ -create python scalar script -get_output_column_count_emit() -emits (x number, y number, z number) as -def run(ctx): - ctx.emit(exa.meta.output_column_count,exa.meta.output_column_count,exa.meta.output_column_count) -/ -create python scalar script -get_output_columns() -emits (column_id number, column_name varchar(200), column_type varchar(20), - column_sql_type varchar(20), column_precision number, column_scale number, - column_length number) as -def run(ctx): - cols = exa.meta.output_columns - for i in range(0, len(cols)): - name = cols[i].name - thetype = repr(cols[i].type) - sql_type = cols[i].sql_type - precision = cols[i].precision - scale = cols[i].scale - length = cols[i].length - if name == None: name = 'no-name' - if thetype == None: thetype = 'no-type' - if sql_type == None: sql_type = 'no-sql-type' - if precision == None: precision = 0 - if scale == None: scale = 0 - if length == None: length = 0 - ctx.emit(i+1, name, thetype, sql_type, precision, scale, length) -/ - --- select get_output_columns() from dual; --- (1, ...) - -create python scalar script -get_precision_scale_length(n decimal(6,3), v varchar(10)) -emits (precision1 number, scale1 number, length1 number, precision2 number, scale2 number, length2 number) as -def run(ctx): - v = exa.meta.input_columns[0] - precision1 = v.precision - scale1 = v.scale - length1 = v.length - w = exa.meta.input_columns[1] - precision2 = w.precision - scale2 = w.scale - length2 = w.length - if precision1== None: precision1= 0 - if scale1== None: scale1= 0 - if length1== None: length1= 0 - if precision2== None: precision2= 0 - if scale2== None: scale2= 0 - if length2== None: length2= 0 - ctx.emit(precision1, scale1, length1, precision2, scale2, length2) -/ - -create python scalar script -get_char_length(text char(10)) -emits(len1 number, len2 number, dummy char(20)) -as -def run(ctx): - v = exa.meta.input_columns[0] - w = exa.meta.output_columns[2] - ctx.emit(v.length,w.length,'9876543210') -/ - diff --git a/test_container/tests/lang/python/numeric_functions.sql b/test_container/tests/lang/python/numeric_functions.sql deleted file mode 100644 index 703bdf796..000000000 --- a/test_container/tests/lang/python/numeric_functions.sql +++ /dev/null @@ -1,51 +0,0 @@ -CREATE python SCALAR SCRIPT -pi() -RETURNS double AS - -import math - -def run(ctx): - return math.pi -/ - -CREATE python SCALAR SCRIPT -double_mult("x" double, "y" double) -RETURNS double AS - -def run(ctx): - if ctx.x is None or ctx.y is None: - return None - else: - return ctx.x * ctx.y -/ - -CREATE python SCALAR SCRIPT add_two_doubles(x DOUBLE, y DOUBLE) RETURNS DOUBLE AS -def run(ctx): - if ctx.x is not None and ctx.y is not None: - return ctx.x + ctx.y; - return None -/ - -CREATE python SCALAR SCRIPT -add_three_doubles(x DOUBLE, y DOUBLE, z DOUBLE) -RETURNS DOUBLE AS -def run(ctx): - if ctx.x is not None and ctx.y is not None and ctx.z is not None: - return ctx.x + ctx.y + ctx.z; - return None -/ - -CREATE python SCALAR SCRIPT -split_integer_into_digits("x" INTEGER) -EMITS (y INTEGER) AS -import math -def run(ctx): - if ctx.x is not None: - y = abs(ctx.x) - while y > 0: - ctx.emit(y % 10) - y //= 10 -/ - - --- vim: ts=2:sts=2:sw=2:et diff --git a/test_container/tests/lang/python/pathological_functions.sql b/test_container/tests/lang/python/pathological_functions.sql deleted file mode 100644 index 8fa5a5d66..000000000 --- a/test_container/tests/lang/python/pathological_functions.sql +++ /dev/null @@ -1,44 +0,0 @@ -CREATE python SCALAR SCRIPT -sleep("sec" double) -RETURNS double AS - -import time - -def run(ctx): - time.sleep(ctx.sec) - return ctx.sec -/ - -CREATE python SCALAR SCRIPT -mem_hog("mb" int) -RETURNS int AS - -def run(ctx): - a = 'x' * 1024 * 1024 - b = {} - for i in range(ctx.mb): - b[i] = '%s%d' % (a+'y', i) - return len(b) -/ - -CREATE python SCALAR SCRIPT -cleanup_check("raise_exc" boolean, "sleep" int) -RETURNS int AS - -import time -sleep = 0 - -def run(ctx): - global sleep - sleep = ctx.sleep - if ctx.raise_exc: - raise ValueError() - return 42 - -def cleanup(): - time.sleep(sleep) - -/ - - --- vim: ts=4:sts=4:sw=4:et:fdm=indent diff --git a/test_container/tests/lang/python/performance.sql b/test_container/tests/lang/python/performance.sql deleted file mode 100644 index c0755d08c..000000000 --- a/test_container/tests/lang/python/performance.sql +++ /dev/null @@ -1,70 +0,0 @@ - -CREATE python SCALAR SCRIPT -performance_map_words(w VARCHAR(1000)) -EMITS (w VARCHAR(1000), c INTEGER) AS - -import re -import string - -pattern = re.compile(r'''([]\w!"#$%&\'()*+,./:;<=>?@[\\^_`{|}~-]+)''') - -def run(ctx): - if ctx.w is not None: - for w in re.findall(pattern, ctx.w): - ctx.emit(w, 1) -/ - -CREATE python SCALAR SCRIPT -performance_map_unicode_words(w VARCHAR(1000)) -EMITS (w VARCHAR(1000), c INTEGER) AS - -import re -import string - -pattern = re.compile(r'''([]\w!"#$%&\'()*+,./:;<=>?@[\\^_`{|}~-]+)''', re.UNICODE) - -def run(ctx): - if ctx.w is not None: - for w in re.findall(pattern, ctx.w): - ctx.emit(w, 1) -/ - -CREATE python SET SCRIPT -performance_reduce_counts(w VARCHAR(1000), c INTEGER) -EMITS (w VARCHAR(1000), c INTEGER) AS - -def run(ctx): - word = ctx.w - count = 0 - while True: - count += ctx.c - if not ctx.next(): break - ctx.emit(word, count) -/ - - -CREATE python SCALAR SCRIPT -performance_map_characters(text VARCHAR(1000)) -EMITS (w CHAR(1), c INTEGER) AS -def run(ctx): - if ctx.text is not None: - for c in ctx.text: - ctx.emit(c, 1) -/ - - -CREATE python SET SCRIPT -performance_reduce_characters(w CHAR(1), c INTEGER) -EMITS (w CHAR(1), c INTEGER) AS - -def run(ctx): - c = 0 - w = ctx.w - if w is not None: - while True: - c += 1 - if not ctx.next(): break - ctx.emit(w, c) -/ - --- vim: ts=2:sts=2:sw=2 diff --git a/test_container/tests/lang/python/types.sql b/test_container/tests/lang/python/types.sql deleted file mode 100644 index 34bb99b52..000000000 --- a/test_container/tests/lang/python/types.sql +++ /dev/null @@ -1,106 +0,0 @@ -CREATE python SCALAR SCRIPT echo_boolean(x BOOLEAN) RETURNS BOOLEAN AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_char1(x CHAR(1)) RETURNS CHAR(1) AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_char10(x CHAR(10)) RETURNS CHAR(10) AS -def run(ctx): - if ctx.x is not None: - if len(ctx.x) != 10: - return None - else: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_date(x DATE) RETURNS DATE AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_integer(x INTEGER) RETURNS INTEGER AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_double(x DOUBLE) RETURNS DOUBLE AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_decimal_36_0(x DECIMAL(36,0)) RETURNS DECIMAL(36,0) AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_decimal_36_36(x DECIMAL(36,36)) RETURNS DECIMAL(36,36) AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - - -CREATE python SCALAR SCRIPT echo_varchar10(x VARCHAR(10)) RETURNS VARCHAR(10) AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT echo_timestamp(x TIMESTAMP) RETURNS TIMESTAMP AS -def run(ctx): - if ctx.x is not None: - return ctx.x - return None -/ - -CREATE python SCALAR SCRIPT run_func_is_empty() RETURNS DOUBLE AS -def run(ctx): - pass -/ - - -CREATE python SCALAR SCRIPT -bottleneck_varchar10(i VARCHAR(20)) -RETURNS VARCHAR(10) AS - -def run(ctx): - return ctx.i -/ - -CREATE python SCALAR SCRIPT -bottleneck_char10(i VARCHAR(20)) -RETURNS CHAR(10) AS - -def run(ctx): - return ctx.i -/ - -CREATE python SCALAR SCRIPT -bottleneck_decimal5(i DECIMAL(20, 0)) -RETURNS DECIMAL(5, 0) AS - -def run(ctx): - return ctx.i -/ - --- vim: ts=4:sts=4:sw=4:et:fdm=indent - diff --git a/test_container/tests/lang/python/unicode.sql b/test_container/tests/lang/python/unicode.sql deleted file mode 100644 index d67515436..000000000 --- a/test_container/tests/lang/python/unicode.sql +++ /dev/null @@ -1,48 +0,0 @@ -CREATE python SCALAR SCRIPT -unicode_len(word VARCHAR(1000)) -RETURNS INT AS - -def run(ctx): - if ctx.word is not None: - return len(ctx.word) -/ - -CREATE python SCALAR SCRIPT -unicode_upper(word VARCHAR(1000)) -RETURNS VARCHAR(1000) AS - -def run(ctx): - if ctx.word is not None: - return ctx.word.upper() -/ - -CREATE python SCALAR SCRIPT -unicode_lower(word VARCHAR(1000)) -RETURNS VARCHAR(1000) AS - -def run(ctx): - if ctx.word is not None: - return ctx.word.lower() -/ - - -CREATE python SCALAR SCRIPT -unicode_count(word VARCHAR(1000), convert_ INT) -EMITS (uchar VARCHAR(1), count INT) AS - -import collections - -def run(ctx): - if ctx.convert_ > 0: - word = ctx.word.upper() - elif ctx.convert_ < 0: - word = ctx.word.lower() - else: - word = ctx.word - - count = collections.Counter(word) - for k, v in count.items(): - ctx.emit(k, v) -/ - --- vim: ts=2:sts=2:sw=2 diff --git a/test_container/tests/lang/python/vectorsize.sql b/test_container/tests/lang/python/vectorsize.sql deleted file mode 100644 index f47707545..000000000 --- a/test_container/tests/lang/python/vectorsize.sql +++ /dev/null @@ -1,66 +0,0 @@ -CREATE python SCALAR SCRIPT -vectorsize5000(A DOUBLE) -RETURNS VARCHAR(2000000) AS - -retval = ''.join([str(i) for i in range(5000)]) - -def run(ctx): - return retval -/ - - -CREATE python SCALAR SCRIPT -vectorsize(length INT, dummy DOUBLE) -RETURNS VARCHAR(2000000) AS -import gc -import sys - -if sys.version_info[0] == 3: xrange = range - -cache = {} -cache_size = 0 -cache_max = 1024*1024*64 - -def run(ctx): - global cache_size, cache - if ctx.length not in cache: - curstr = ''.join([str(i) for i in xrange(ctx.length)]) - if cache_size + len(curstr) > cache_max: - cache = {} - cache_size = 0 - gc.collect() - cache[ctx.length] = curstr - cache_size += len(curstr) - return cache[ctx.length] -/ - - -CREATE python SCALAR SCRIPT -vectorsize_set(length INT, n INT, dummy DOUBLE) -EMITS (o VARCHAR(2000000)) AS -import gc -import sys - -if sys.version_info[0] == 3: xrange = range - -cache = {} -cache_size = 0 -cache_max = 1024*1024*64 - -def run(ctx): - global cache_size, cache - if ctx.length not in cache: - curstr = ''.join([str(i) for i in xrange(ctx.length)]) - if cache_size + len(curstr) > cache_max: - cache = {} - cache_size = 0 - gc.collect() - cache[ctx.length] = curstr - cache_size += len(curstr) - for i in xrange(ctx.n): - ctx.emit(cache[ctx.length]) -/ - - - --- vim: ts=4:sts=4:sw=4:et:fdm=indent diff --git a/test_container/tests/test/generic/emit.py b/test_container/tests/test/generic/emit.py index 628e88834..db9e5a78e 100644 --- a/test_container/tests/test/generic/emit.py +++ b/test_container/tests/test/generic/emit.py @@ -216,7 +216,7 @@ def test_timestamp(self): rows = self.query(''' describe fn2.foo ''') - self.assertEqual('TIMESTAMP', rows[0][1]) + self.assertEqual('TIMESTAMP(3)', rows[0][1]) @requires('LINE_1I_1O') def test_timestamp_with_timezone(self): @@ -233,7 +233,7 @@ def test_timestamp_with_timezone(self): rows = self.query(''' describe fn2.foo ''') - self.assertEqual('TIMESTAMP WITH LOCAL TIME ZONE', rows[0][1]) + self.assertEqual('TIMESTAMP(3) WITH LOCAL TIME ZONE', rows[0][1]) @requires('LINE_1I_1O') def test_date(self): diff --git a/test_container/tests/test/pandas/all/emit_dtypes.py b/test_container/tests/test/pandas/all/emit_dtypes.py index de30e3589..1c00dfae3 100755 --- a/test_container/tests/test/pandas/all/emit_dtypes.py +++ b/test_container/tests/test/pandas/all/emit_dtypes.py @@ -332,15 +332,14 @@ def run(ctx): ''') print(sql) self.query(sql) - with UdfDebugger(test_case=self): - rows = self.query('''SELECT test_dtype_emit(0)''') - if isinstance(expected_result,str): - self.assertRegex(rows[0][2], expected_result) + rows = self.query('''SELECT test_dtype_emit(0)''') + if isinstance(expected_result,str): + self.assertRegex(rows[0][2], expected_result) + else: + if use_almost_equal: + self.assertRowsAlmostEqual(expected_result, rows, places=1) else: - if use_almost_equal: - self.assertRowsAlmostEqual(expected_result, rows, places=1) - else: - self.assertRowsEqual(expected_result, rows) + self.assertRowsEqual(expected_result, rows) def isValueAlmostEqual(self, left, right, places): if isinstance(left, (float, Decimal)) and isinstance(right, (float, Decimal)): diff --git a/test_container/tests/test/pandas/pandas2/pandas.py b/test_container/tests/test/pandas/pandas2/pandas.py index 802edd422..a853f1652 100755 --- a/test_container/tests/test/pandas/pandas2/pandas.py +++ b/test_container/tests/test/pandas/pandas2/pandas.py @@ -328,15 +328,14 @@ def run(ctx): ''') print(sql) self.query(sql) - with UdfDebugger(test_case=self): - rows = self.query('''SELECT test_dtype_emit(0)''') - if isinstance(expected_result,str): - self.assertRegex(rows[0][2], expected_result) + rows = self.query('''SELECT test_dtype_emit(0)''') + if isinstance(expected_result,str): + self.assertRegex(rows[0][2], expected_result) + else: + if use_almost_equal: + self.assertRowsAlmostEqual(expected_result, rows, places=1) else: - if use_almost_equal: - self.assertRowsAlmostEqual(expected_result, rows, places=1) - else: - self.assertRowsEqual(expected_result, rows) + self.assertRowsEqual(expected_result, rows) def isValueAlmostEqual(self, left, right, places): if isinstance(left, (float, Decimal)) and isinstance(right, (float, Decimal)): diff --git a/test_container/tests/test/python/bugs.py b/test_container/tests/test/python/bugs.py deleted file mode 100644 index 2e8355573..000000000 --- a/test_container/tests/test/python/bugs.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python3 - -from exasol_python_test_framework import udf - - -class GetConnectionMemoryBug(udf.TestCase): - def setUp(self): - self.query('create schema get_connection_bugs', ignore_errors=True) - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SET SCRIPT get_connection_bugs.python_conn ("str" VARCHAR(100)) - EMITS (con VARCHAR(500)) - AS - def run(ctx): - conn = exa.get_connection(ctx.str) - ctx.emit(str(conn)) - / - ''')) - self.query('''CREATE OR REPLACE CONNECTION test_get_connection_bug_connection TO '' USER 'ialjksdhfalskdjhflaskdjfhalskdjhflaksjdhflaksdjfhalksjdfhlaksjdhflaksjdhfalskjdfhalskdjhflaksjdhflaksjdfhlaksjsadajksdhfaksjdfhalksdjfhalksdjfhalksjdfhqwiueryqw;er;lkjqwe;rdhflaksjdfhlaksdjfhaabcdefghijklmnopqrstuvwxyz' IDENTIFIED BY 'abcdeoqsdfgsdjfglksjdfhglskjdfhglskdjfglskjdfghuietyewlrkjthertrewerlkjhqwelrkjhqwerlkjnwqerlkjhqwerkjlhqwerlkjhqwerlkhqwerkljhqwerlkjhqwerfghijklmnopqrstuvwxyz';''') - self.query('''CREATE OR REPLACE table ten as (values 0,1,2,3,4,5,6,7,8,9 as p(x));''') - - - def test_get_connection(self): - for x in range(10): - row = self.query('''select count(*) from (select get_connection_bugs.python_conn('test_get_connection_bug_connection') from (select a.x from ten a, ten, ten, ten, ten) v group by mod(v.rownum,4019))''')[0] - self.assertEqual(4019,row[0]) - - - -class SUP7256(udf.TestCase): - def setUp(self): - self.query('create schema sup7256', ignore_errors=True) - self.query(udf.fixindent(''' - CREATE OR REPLACE python scalar SCRIPT pandas_babies(x int) - returns int as - import pandas as pd - def run(ctx): - # This is just some stuff from the pandas tutorial - # The inital set of baby names and bith rates - names = ['Bob','Jessica','Mary','John','Mel'] - births = [968, 155, 77, 578, 973] - BabyDataSet = list(zip(names,births)) - df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births']) - return len(df) - / - ''')) - def test_basic_pandas(self): - row = self.query("select pandas_babies(12)")[0] - self.assertEqual(5,row[0]) - - -class DWA19106(udf.TestCase): - def setUp(self): - self.query('CREATE SCHEMA DWA19106', ignore_errors=True) - self.query(udf.fixindent(''' - CREATE OR REPLACE python SET SCRIPT blow_up(x varchar(15000)) - EMITS (x varchar(15000)) AS - def run(ctx): - ctx.emit(str(len(ctx.x))) - / - ''')) - - def test_explode(self): - row = self.query('select blow_up(c) from (select "$RANDOM"(varchar(15000),0,0,15000,15000) as c), (select * from (values 202,202,203,203,205,206,208,207,206,204,205,206,206,207,208,208,203,203,203,203,204,204,204,204,209,209,208,207,207,206,205,205,200,203,205,206,206,205,206,207,203,204,205,205,206,206,207,207,206,205,204,204,203,203,204,204,204,203,203,202,201,200,199,199,201,201,201,201,201,201,201,201,200,199,198,198,198,74,74,75,75,74,73,71,70,71,71,72,72,72,73,73,73,75,76,77,76,74,72,73,74,76,78,79,78,76,75,76,77,82,81,81,81,81,81,81,81,77,78,78,77,77,78,80,81,77,78,79,81,83,84,84,84,84,84,83,82,80,79,78,76,75,75,76,79,80,79,77,71,67,162,159,159,164,168,173,176,181,182,185,189,192,195,195,197,208,209,212,211,212,211,210,209,207,208,209,209,208,207,205,203,206,206,206,207,209,211,213,213,207,205,205,206,206,207,207,207,204,204,204,204,205,205,205,205,206,205,205,204,202,201,201,200,199,201,203,204,203,203,204,206,203,203,204,204,205,205,206,207,206,205,204,204,203,203,204,204,200,200,200,201,201,201,201,201,201,201,201,201,201,201,201,201,198,198,197,197,197,69,70,72,74,75,74,73,73,72,72,72,72,73,73,73,74,74,75,77,77,75,74,74,75) as p(x))')[0] - self.assertEqual('15000',row[0]) - - - - -class SPOT_XYZ(udf.TestCase): - def setUp(self): - self.query('CREATE SCHEMA SPOT_XYZ', ignore_errors=True) - self.query(udf.fixindent(''' - create or replace python scalar script large_exception(n int) - returns int as - - def run(ctx): - x = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n' - raise Exception(x*ctx.n) - return ctx.n - / - ''')) - - def test_large_exception_msg(self): - with self.assertRaisesRegex(Exception, 'VM error:'): - self.query('SELECT SPOT_XYZ.large_exception(300000) FROM dual') - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/env_directive.py b/test_container/tests/test/python/env_directive.py deleted file mode 100644 index b4785d93b..000000000 --- a/test_container/tests/test/python/env_directive.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -# encoding: utf8 - - -from exasol_python_test_framework import udf - - -class EnvDirective(udf.TestCase): - ### Basic Functionality Test of %env directive in Python UDF Scripts - - def setUp(self): - self.query('DROP SCHEMA EnvDirectiveSchema CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA EnvDirectiveSchema') - - # Set and Retrieve ENVIRONMENT_VARIABLE_VALUE. - def test_env_set_and_use_env_var(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - %env ENV_VAR=ENVIRONMENT_VARIABLE_VALUE; - import os - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - rows = self.query('''select EnvDirectiveSchema.env_var_test()''') - self.assertRowsEqual([('ENVIRONMENT_VARIABLE_VALUE',)],rows) - - # %env directive ends without semicolon. Parsing Error should occur. - def test_env_set_env_var_without_semicolon(self): - with self.assertRaisesRegex(Exception, r'Error while parsing %env option line'): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - %env ENV_VAR="ENVIRONMENT_VARIABLE_VALUE" - import os - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - - # %env directive is commented out in Python style. KeyError expected. - def test_env_set_env_var_python_comment(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - # %env ENV_VAR=ENVIRONMENT_VARIABLE_VALUE; - import os - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - with self.assertRaisesRegex(Exception, 'KeyError'): - rows = self.query('''select EnvDirectiveSchema.env_var_test()''') - - # %env directive is commented out NOT in Python style. Python SyntaxError expected. - def test_env_set_env_var_not_python_comment(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - // %env ENV_VAR=ENVIRONMENT_VARIABLE_VALUE; - import os - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - with self.assertRaisesRegex(Exception, 'SyntaxError'): - rows = self.query('''select EnvDirectiveSchema.env_var_test()''') - - # %env directive is appended after a source code line. Python SyntaxError expected. - def test_env_set_env_var_after_code(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - import os %env ENV_VAR=ENVIRONMENT_VARIABLE_VALUE; - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - with self.assertRaisesRegex(Exception, 'SyntaxError'): - rows = self.query('''select EnvDirectiveSchema.env_var_test()''') - - # %env directive is Python comment and appended after a source code line. KeyError expected. - def test_env_set_env_var_python_comment_after_code(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE PYTHON SCALAR SCRIPT env_var_test() returns varchar(1000) AS - import os # %env ENV_VAR=ENVIRONMENT_VARIABLE_VALUE; - def run(ctx): - return os.environ["ENV_VAR"] - / - ''')) - with self.assertRaisesRegex(Exception, 'KeyError'): - rows = self.query('''select EnvDirectiveSchema.env_var_test()''') - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/general.py b/test_container/tests/test/python/general.py deleted file mode 100755 index e410b352e..000000000 --- a/test_container/tests/test/python/general.py +++ /dev/null @@ -1,392 +0,0 @@ -#!/usr/bin/env python3 - -from exasol_python_test_framework import udf -from exasol_python_test_framework.udf import useData - - -class PythonInterpreter(udf.TestCase): - def setUp(self): - self.query('CREATE SCHEMA FN2', ignore_errors=True) - self.query('OPEN SCHEMA FN2', ignore_errors=True) - - def test_body_is_not_executed_at_creation_time(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - sleep() - RETURNS int AS - - raise ValueError() - - def run(ctx): - ctx.emit(42) - / - ''')) - - def test_syntax_errors_not_caught_at_creation_time(self): - sql = udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - syntax_error() - RETURNS int AS - - def run(ctx) - ctx.emit(42) - / - ''') - self.query(sql) - - def test_methods_have_access_to_global_context(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - global_fn() - RETURNS int AS - - foo = 2 - - def bar(): - global foo - foo = 5 - - def run(ctx): - bar() - return foo - ''')) - row = self.query('SELECT global_fn() FROM DUAL')[0] - self.assertEqual(5, row[0]) - - def test_exception_in_cleanup_is_propagated(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - foo() - RETURNS INT AS - - def run(ctx): - return 42 - - def cleanup(): - raise ValueError('4711') - ''')) - with self.assertRaisesRegex(Exception, '4711'): - self.query('SELECT foo() FROM dual') - - def test_exception_in_run_and_cleanup_is_propagated(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - foo() - RETURNS INT AS - - def run(ctx): - raise ValueError('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.') - - def cleanup(): - raise ValueError('YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY') - ''')) - with self.assertRaisesRegex(Exception, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.*YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'): - self.query('SELECT foo() FROM dual') - - def test_cleanup_has_global_context(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - foo() - RETURNS INT AS - - flag = 21 - - def run(ctx): - global flag - flag = 4711 - return 42 - - def cleanup(): - raise ValueError(flag) - ''')) - with self.assertRaisesRegex(Exception, '4711'): - rows = self.query('SELECT foo() FROM dual') - self.assertRowsEqual([(42,)], rows) - - -class PythonImport(udf.TestCase): - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - - modules = ''' - cStringIO - calendar - cmath - collections - contextlib - copy - csv - datetime - decimal - exceptions - functools - hashlib - hmac - itertools - locale - math - os - random - re - shlex - string - sys - textwrap - time - unicodedata - uuid - weakref - '''.split() - - @useData((x,) for x in modules) - def test_stdlib_modules_are_importable(self, module): - sql = udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - i() - RETURNS VARCHAR(1024) AS - - import %(module)s - - def run(ctx): - try: - return %(module)s.__file__ - except AttributeError: - return "(built-in)" - ''') - self.query(sql % {'module': module}) - self.query('SELECT i() FROM DUAL') - - modules = ''' - cjson - lxml - numpy - pytz - scipy - '''.split() - - @useData((x,) for x in modules) - def test_3rdparty_modules_are_importable(self, module): - sql = udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - i() - RETURNS VARCHAR(1024) AS - import %(module)s - def run(ctx): - try: - return %(module)s.__file__ - except AttributeError: - return "(built-in)" - ''') - self.query(sql % {'module': module}) - self.query('SELECT i() FROM DUAL') - - # modules = ''' - # '''.split() - # @useData((x,) for x in modules) - # @expectedFailure - # def test_3rdparty_modules_are_importable_negative_list(self, module): - # '''DWA-13850''' - # sql = udf.fixindent(''' - # CREATE OR REPLACE python SCALAR SCRIPT - # i() - # RETURNS VARCHAR(1024) AS - # import %(module)s - # def run(ctx): - # try: - # return %(module)s.__file__ - # except AttributeError: - # return "(built-in)" - # ''') - # self.query(sql % {'module': module}) - # self.query('SELECT i() FROM DUAL') - - def test_ImportError_is_catchable(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - catch_import_error() - RETURNS int AS - - try: - import unknown_module - except ImportError: - pass - - def run(ctx): - return 42 - ''')) - rows = self.query('SELECT catch_import_error() FROM dual') - self.assertRowsEqual([(42,)], rows) - - def test_import_error_message_is_case_sensitive(self): - sql = udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - import_error() - RETURNS int AS - - import Unknown_Module - def run(ctx): pass - ''') - with self.assertRaisesRegex(Exception, 'Unknown_Module'): - self.query(sql) - self.query('SELECT import_error() FROM dual') - - def test_import_is_case_sensitive(self): - scripts = [ - ('my_module', 4711), - ('My_Module', 42), - ('MY_MODULE', 1234), - ] - sql = udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - "%s"() - RETURNS int AS - - ID = %d - - def run(ctx): pass - ''') - for pair in scripts: - self.query(sql % pair) - - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - import_case_sensitive() - RETURNS int AS - - My_Module = exa.import_script('"My_Module"') - - def run(ctx): - return My_Module.ID - ''')) - rows = self.query('SELECT import_case_sensitive() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - -class PythonSyntax(udf.TestCase): - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - - def test_sql_comments_are_ignored(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - sql_comments() - RETURNS INT AS - - def run(ctx): - return ( - --3 - +4) - ''')) - rows = self.query('SELECT sql_comments() FROM dual') - self.assertEqual(7, rows[0][0]) - - def test_python_comments_are_ignored_in_functions(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - python_comments() - RETURNS INT AS - - def run(ctx): - return ( 19 - #--3 - #+4 - ) - ''')) - rows = self.query('SELECT python_comments() FROM dual') - self.assertEqual(19, rows[0][0]) - - def test_python_comments_are_ignored_in_body(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - python_comments() - RETURNS INT AS - - #import foo - - def run(ctx): - return 43 - ''')) - rows = self.query('SELECT python_comments() FROM dual') - self.assertEqual(43, rows[0][0]) - - -class PythonErrors(udf.TestCase): - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - - def create_and_execute(self, body): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - foo() - RETURNS INT AS - - def run(ctx): - %s - return 42 - ''' % body)) - self.query('SELECT foo() FROM dual') - - def test_ZeroDivisionError(self): - with self.assertRaisesRegex(Exception, 'ZeroDivisionError'): - self.create_and_execute('1/0') - - def test_AttributeError(self): - with self.assertRaisesRegex(Exception, 'AttributeError'): - self.create_and_execute('int(4).append(3)') - - def test_TypeError(self): - with self.assertRaisesRegex(Exception, 'TypeError'): - self.create_and_execute('sorted(5)') - - def test_ImportError(self): - with self.assertRaisesRegex(Exception, 'ImportError'): - self.create_and_execute('import unknown_module') - - def test_NameError(self): - with self.assertRaisesRegex(Exception, 'NameError'): - self.create_and_execute('unknown_thing') - - def test_IndexError(self): - with self.assertRaisesRegex(Exception, 'IndexError'): - self.create_and_execute('range(10)[14]') - - def test_KeyError(self): - with self.assertRaisesRegex(Exception, 'KeyError'): - self.create_and_execute('{}[5]') - - def test_SyntaxError(self): - with self.assertRaisesRegex(Exception, 'SyntaxError'): - self.create_and_execute('45 (;') - - -class Robustness(udf.TestCase): - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - - def test_repeated_failed_import(self): - """ - internal server error after failed imports (DWA-13377) - UDF: Python: no exception when importing unknown module + wrong result (DWA-13666) - """ - sql = udf.fixindent(''' - CREATE OR REPLACE python SET SCRIPT - foo(x double) - RETURNS int AS - - import completely_unknown_module - - def run(ctx): - return 42 - ''') - for _ in range(100): - with self.assertRaisesRegex(Exception, 'ImportError: No module named completely_unknown_module'): - self.query(sql) - self.query('SELECT foo(NULL) from DUAL') - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/getpass.py b/test_container/tests/test/python/getpass.py deleted file mode 100755 index b970c9917..000000000 --- a/test_container/tests/test/python/getpass.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 - -from exasol_python_test_framework import udf - - -class GetpassTest(udf.TestCase): - def setUp(self): - self.query('CREATE SCHEMA getpass', ignore_errors=True) - self.query('OPEN SCHEMA getpass', ignore_errors=True) - - def tearDown(self): - self.query('DROP SCHEMA getpass CASCADE', ignore_errors=True) - - def test_getuser(self): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - get_user_from_passwd() - RETURNS VARCHAR(10000) AS - - def run(ctx): - import getpass - return getpass.getuser() - / - ''')) - rows = self.query("select get_user_from_passwd()") - expected = "exadefusr" - self.assertEqual(expected, rows[0][0]) - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/script_import.py b/test_container/tests/test/python/script_import.py deleted file mode 100755 index c2dd454a4..000000000 --- a/test_container/tests/test/python/script_import.py +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env python3 - -from exasol_python_test_framework import udf -from exasol_python_test_framework.udf import useData, get_supported_languages -from exasol_python_test_framework.exatest.testcase import skipIf - - -class ScriptImport(udf.TestCase): - - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('DROP SCHEMA FN3 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - self.query('CREATE SCHEMA FN3') - self.query('OPEN SCHEMA FN2') - - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - bottom() - RETURNS INT AS - - def f(): - return 42 - / - ''')) - - def test_import_works(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - b = exa.import_script('bottom') - - def run(ctx): - return b.f() - / - ''')) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - def test_import_is_semi_case_sensitive(self): - def check(script_name, n): - self.query(udf.fixindent(''' - CREATE OR REPLACE python SCALAR SCRIPT - foo() - RETURNS INT AS - - def run(ctx): - m = exa.import_script(%s) - return m.f() - /''' % script_name)) - self.assertRowsEqual([(n,)], self.query('SELECT foo() FROM DUAL')) - - for name in 'bar', 'Bar', 'BAR': - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - "%s"() - RETURNS INT AS - - def f(): - return %d - /''' % (name, sum(x.isupper() for x in name)) - )) - - check("'bar'", 3) - check("'Bar'", 3) - check("'Bar'", 3) - check("'\"Bar\"'", 1) - check("'\"bar\"'", 0) - - def test_import_error_is_catchable(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - def run(ctx): - try: - exa.import_script('unknown_module') - except ImportError: - return 4711 - / - ''')) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(4711,)], rows) - - def test_import_fails_for_lua_script(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - bar = exa.import_script('bar') - - def run(ctx): - return bar.f() - / - ''')) - self.query(udf.fixindent(''' - CREATE lua SCALAR SCRIPT - bar() - RETURNS DOUBLE AS - - function f() - return 32 - end - / - ''')) - with self.assertRaisesRegex(Exception, 'ImportError:.* wrong language LUA'): - self.query('SELECT foo() FROM DUAL') - - @skipIf('R' not in get_supported_languages(), "UDF does not support R") - def test_import_fails_for_r_script(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - bar = exa.import_script('bar') - - def run(ctx): - return bar.f() - / - ''')) - self.query(udf.fixindent(''' - CREATE r SCALAR SCRIPT - bar() - RETURNS DOUBLE AS - - f <- function() { - 32 - } - / - ''')) - with self.assertRaisesRegex(Exception, 'ImportError:.* wrong language R'): - self.query('SELECT foo() FROM DUAL') - - def test_imported_scripts_are_cached(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS BOOLEAN AS - - def run(ctx): - a = exa.import_script('bottom') - b = exa.import_script('bottom') - - return a is b - / - ''')) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(True,)], rows) - - @useData([ - ('fn2', 'bottom'), - ('fn2', 'fn2.bottom'), - ('fn2', 'exa_db.fn2.bottom'), - ('fn3', 'fn2.bottom'), - ('fn3', 'exa_db.fn2.bottom') - ]) - def test_import_works_with_qualified_names(self, schema, name): - self.query('OPEN SCHEMA %s' % schema) - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - b = exa.import_script('%s') - - def run(ctx): - return b.f() - / - ''' % name)) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - def test_chained_import_works_via_function_call(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - bar = exa.import_script('bar') - - def run(ctx): - return bar.b() - / - ''')) - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - bar() - RETURNS INT AS - - bottom = exa.import_script('bottom') - - def b(): - return bottom.f() - / - ''')) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - def test_chained_import_works_via_chained_call(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - foo() - RETURNS INT AS - - bar = exa.import_script('bar') - - def run(ctx): - return bar.bottom.f() - / - ''')) - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - bar() - RETURNS INT AS - - bottom = exa.import_script('bottom') - / - ''')) - rows = self.query('SELECT foo() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - def test_mutual_import_works(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - ping() - RETURNS INT AS - - pong = exa.import_script('pong') - - def ping(n): - if n > 0: - return pong.pong(n-1) + 1 - else: - return 0 - - def run(ctx): - return ping(42) - / - ''')) - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - pong() - RETURNS INT AS - - ping = exa.import_script('ping') - - def pong(n): - if n > 0: - return ping.ping(n-1) + 1 - else: - return 0 - / - ''')) - rows = self.query('SELECT ping() FROM DUAL') - self.assertRowsEqual([(42,)], rows) - - def testImportWithView(self): - self.createUser("foo", "foo") - self.commit() - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - spot42542script() - RETURNS INT AS - - b = exa.import_script('bottom') - - def run(ctx): - return b.f() - / - ''')) - self.query("create or replace view FN2.spot42542_view as SELECT spot42542script() as col FROM DUAL") - self.query("grant select on FN2.spot42542_view to foo") - self.commit() - rows = self.query('''select * from FN2.spot42542_view''') - self.assertRowsEqual([(42,)], rows) - foo_conn = self.getConnection('foo', 'foo') - rows = foo_conn.query('''select * from FN2.spot42542_view''') - self.assertRowsEqual([(42,)], rows) - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/specific_types.py b/test_container/tests/test/python/specific_types.py deleted file mode 100755 index e5992850d..000000000 --- a/test_container/tests/test/python/specific_types.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 -# encoding: utf8 - - -from exasol_python_test_framework import udf - - -class PythonTypes(udf.TestCase): - def setUp(self): - self.query('DROP SCHEMA FN2 CASCADE', ignore_errors=True) - self.query('CREATE SCHEMA FN2') - - def test_not_convert_string_to_double(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - wrong_type() RETURNS DOUBLE AS - def run(ctx): - return "one point five" - ''')) - with self.assertRaisesRegex(Exception, r'type float but data given have type'): - self.query('''SELECT wrong_type() FROM DUAL''') - - def test_raises_with_incompatible_type(self): - self.query(udf.fixindent(''' - CREATE python SCALAR SCRIPT - wrong_type() RETURNS DOUBLE AS - def run(ctx): - return "one point five" - ''')) - with self.assertRaisesRegex(Exception, r'type float but data given have type'): - self.query('''SELECT wrong_type() FROM DUAL''') - - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/unicode.py b/test_container/tests/test/python/unicode.py deleted file mode 100755 index 14bf64951..000000000 --- a/test_container/tests/test/python/unicode.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -# encoding: utf8 - -import locale -import os -import string -import subprocess - -from exasol_python_test_framework import udf - -locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') - - -class PythonUnicode(udf.TestCase): - def test_unicode_umlaute(self): - cmd = '''%(exaplus)s -c %(conn)s -u sys -P exasol - -no-config -autocommit ON -L -pipe''' % { - 'exaplus': os.environ.get('EXAPLUS', '/usr/opt/EXASuite-4/EXASolution-4.2.9/bin/Console/exaplus'), - 'conn': udf.opts.server - } - env = os.environ.copy() - env['PATH'] = '/usr/opt/jdk1.8.0_latest/bin:' + env['PATH'] - env['LC_ALL'] = 'en_US.UTF-8' - exaplus = subprocess.Popen(cmd.split(), env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - - u = 'äöüß' + chr(382) + chr(65279) + chr(63882) + chr(64432) - - sql = udf.fixindent(''' - DROP SCHEMA fn1 CASCADE; - CREATE SCHEMA fn1; - CREATE OR REPLACE python SCALAR SCRIPT - unicode_in_script_body() - RETURNS INTEGER AS - - import string - letters = string.ascii_letters + u'%s' - - - def run(ctx): - return len(letters) - / - SELECT 'x' || fn1.unicode_in_script_body() || 'x' FROM DUAL; - ''' % u) - out, _err = exaplus.communicate(sql.encode('utf8')) - expected = 'x%dx' % (len(string.ascii_letters) + len(u)) - self.assertIn(expected, out.decode('utf-8')) - -if __name__ == '__main__': - udf.main() diff --git a/test_container/tests/test/python/external_modules.py b/test_container/tests/test/python3/external_modules.py similarity index 100% rename from test_container/tests/test/python/external_modules.py rename to test_container/tests/test/python3/external_modules.py diff --git a/test_container/tests/test/python/installed_packages.py b/test_container/tests/test/python3/installed_packages.py similarity index 100% rename from test_container/tests/test/python/installed_packages.py rename to test_container/tests/test/python3/installed_packages.py diff --git a/test_container/tests/test/python/network.py b/test_container/tests/test/python3/network.py similarity index 100% rename from test_container/tests/test/python/network.py rename to test_container/tests/test/python3/network.py diff --git a/test_container/tests/test/standard-flavor/7.0/available-packages.py b/test_container/tests/test/standard-flavor/7.0/available-packages.py index 7e92d83bd..78e2a9393 100755 --- a/test_container/tests/test/standard-flavor/7.0/available-packages.py +++ b/test_container/tests/test/standard-flavor/7.0/available-packages.py @@ -7,57 +7,6 @@ AVAILABLE_PACKAGES_SCHEMA = "available_packages" -class AvailablePythonPackages(udf.TestCase): - def setUp(self): - self.query(f'create schema {AVAILABLE_PACKAGES_SCHEMA}', ignore_errors=True) - - data = [ - ("cffi",), - ("cryptography",), - ("docutils",), - ("enum",), - ("idna",), - ("ipaddress",), - ("jinja2",), - ("martian",), - ("google.protobuf",), - ("pyasn1",), - ("pyftpdlib",), - ("pyodbc",), - ("OpenSSL",), - ("ldap",), - ("ldb",), - ("roman",), - ("sklearn",), - ("cjson",), - ("lxml",), - ("numpy",), - ("setuptools",), - ("pandas",), - ("redis",), - ("scipy",), - ("boto3",), - ("boto",), - ("pycurl",), - ("requests",), - ("EXASOL",), - ("paramiko",), - ("pysftp",), - ("samba",), - ("simplejson",), - ("pycparser",), - ("pycryptopp",), - ("pygments",), - ("pykickstart",), - ("talloc",), - ("pyPdf",False,"PyPDF2"), - ] - - @useData(data) - def test_package_import(self, pkg, fail=False, alternative=None): - run_python_package_import_test(self, AVAILABLE_PACKAGES_SCHEMA, "PYTHON", pkg, fail, alternative) - - class AvailablePython3Packages(udf.TestCase): def setUp(self): self.query(f'create schema {AVAILABLE_PACKAGES_SCHEMA}', ignore_errors=True) diff --git a/test_container/tests/test/standard-flavor/all/connect_to_exasol_with_websocket_api.py b/test_container/tests/test/standard-flavor/all/connect_to_exasol_with_websocket_api.py index 15ea4ad91..ac6156e54 100644 --- a/test_container/tests/test/standard-flavor/all/connect_to_exasol_with_websocket_api.py +++ b/test_container/tests/test/standard-flavor/all/connect_to_exasol_with_websocket_api.py @@ -13,22 +13,6 @@ class WebsocketAPIConnectionTest(udf.TestCase): def setUp(self): self.query('create schema websocket_api', ignore_errors=True) - def run_unsecure_websocket_api_connection(self, python_version): - self.query(udf.fixindent(''' - CREATE OR REPLACE %s SCALAR SCRIPT websocket_api.connect_unsecure() returns int AS - import EXASOL - import os - def run(ctx): - os.environ["USER"]="exasolution" - with EXASOL.connect('ws://%s', '%s', '%s') as connection: - with connection.cursor() as cursor: - cursor.execute('SELECT 1 FROM dual') - for row in cursor: - pass - / - ''' % (python_version, self.connection, self.user, self.pwd))) - self.query('''SELECT websocket_api.connect_unsecure() FROM dual''') - def run_secure_websocket_api_connection(self, python_version): self.query(udf.fixindent(''' CREATE OR REPLACE %s SCALAR SCRIPT websocket_api.connect_secure() returns int AS @@ -46,15 +30,6 @@ def run(ctx): ''' % (python_version, self.connection, self.user, self.pwd))) self.query('''SELECT websocket_api.connect_secure() FROM dual''') - def test_unsecure_websocket_api_connection_python2(self): - self.run_unsecure_websocket_api_connection("PYTHON") - - def test_unsecure_websocket_api_connection_python3(self): - self.run_unsecure_websocket_api_connection("PYTHON3") - - def test_secure_websocket_api_connection_python2(self): - self.run_secure_websocket_api_connection("PYTHON") - def test_secure_websocket_api_connection_python3(self): self.run_secure_websocket_api_connection("PYTHON3") diff --git a/test_container/tests/test/standard-flavor/all/paramiko_connection_test.py b/test_container/tests/test/standard-flavor/all/paramiko_connection_test.py index 5db098f56..61c106c6e 100644 --- a/test_container/tests/test/standard-flavor/all/paramiko_connection_test.py +++ b/test_container/tests/test/standard-flavor/all/paramiko_connection_test.py @@ -12,10 +12,6 @@ class ParamikoConnectionTest(udf.TestCase): def test_connect_via_paramiko_to_ssh_python3(self): self.connect_via_paramiko_to_ssh("PYTHON3") - @udf.skipIfNot(docker_db_environment.is_available, reason="This test requires a docker-db environment") - def test_connect_via_paramiko_to_ssh_python2(self): - self.connect_via_paramiko_to_ssh("PYTHON") - def connect_via_paramiko_to_ssh(self, python_version): schema = "test_connect_via_paramiko_to_ssh_"+python_version env = docker_db_environment.DockerDBEnvironment(schema) diff --git a/test_container/tests/test/standard-flavor/all/pysftp_connection_test.py b/test_container/tests/test/standard-flavor/all/pysftp_connection_test.py index 9a05212d7..76bd75d33 100644 --- a/test_container/tests/test/standard-flavor/all/pysftp_connection_test.py +++ b/test_container/tests/test/standard-flavor/all/pysftp_connection_test.py @@ -12,10 +12,6 @@ class PysftpConnectionTest(udf.TestCase): def test_pysftp_connect_python3(self): self.pysftp_connect("PYTHON3") - @udf.skipIfNot(docker_db_environment.is_available, reason="This test requires a docker-db environment") - def test_pysftp_connect_python2(self): - self.pysftp_connect("PYTHON") - def pysftp_connect(self, python_version): schema = "test_pysftp_connect" + python_version env = docker_db_environment.DockerDBEnvironment(schema) diff --git a/test_container/tests/test/standard-flavor/all/row_level_security_adapter_script.txt b/test_container/tests/test/standard-flavor/all/row_level_security_adapter_script.txt index d55f03fd7..a71d22ced 100644 --- a/test_container/tests/test/standard-flavor/all/row_level_security_adapter_script.txt +++ b/test_container/tests/test/standard-flavor/all/row_level_security_adapter_script.txt @@ -2,6 +2,7 @@ CREATE OR REPLACE PYTHON3 ADAPTER SCRIPT ROW_LEVEL_SECURITY_ADAPTER.rls_adapter import json import string import os +import ssl os.environ["USER"] = "exasolution" @@ -23,10 +24,9 @@ def get_meta_for_schema(meta_connection, table_schema): c = exa.get_connection(meta_connection) tabs = [] - with EXASOL.connect(c.address, c.user, c.password) as connection: + with EXASOL.connect(c.address, c.user, c.password, sslopt={"cert_reqs": ssl.CERT_NONE}) as connection: with connection.cursor() as cursor: query = "select table_name from EXA_ALL_TABLES where table_schema='%s'" % table_schema - #print("get_meta_for_schema tables query", query) result = cursor.execute(query) #print("get_meta_for_schema table result", result) if result > 0: @@ -59,10 +59,9 @@ def user_wants_only_active(username, meta_connection, adapter_schema): import EXASOL c = exa.get_connection(meta_connection) - with EXASOL.connect(c.address, c.user, c.password) as connection: + with EXASOL.connect(c.address, c.user, c.password, sslopt={"cert_reqs": ssl.CERT_NONE}) as connection: with connection.cursor() as cursor: query = """select wants_only_active from "%s".user_pref where username='%s'""" % (adapter_schema, username) - #print("user_wants_only_active", query) cursor.execute(query) if cursor.rowcount == 0: raise ValueError( """Config error: no preference for user %s defined in %s.user_pref'""" % (username, adapter_schema)) diff --git a/test_container/tests/test/standard-flavor/all/row_level_security_with_websocket_api.py b/test_container/tests/test/standard-flavor/all/row_level_security_with_websocket_api.py index 8f4a249f2..54ee887e0 100644 --- a/test_container/tests/test/standard-flavor/all/row_level_security_with_websocket_api.py +++ b/test_container/tests/test/standard-flavor/all/row_level_security_with_websocket_api.py @@ -48,7 +48,7 @@ def setUp(self): ('k', 'l', 'U1', false); ''')) self.query(udf.fixindent(''' - create or replace connection sys_connection to 'ws://%s' user '%s' identified by '%s' + create or replace connection sys_connection to 'wss://%s' user '%s' identified by '%s' ''' % (self.connection, "sys", "exasol"))) self.query("commit")