diff --git a/.github/actions/prepare_poetry_env/action.yml b/.github/actions/prepare_poetry_env/action.yml index 9f2c343e..568e912f 100644 --- a/.github/actions/prepare_poetry_env/action.yml +++ b/.github/actions/prepare_poetry_env/action.yml @@ -4,7 +4,7 @@ inputs: python-version: description: 'The Python version to use' required: true - default: '3.8' + default: '3.10' runs: using: "composite" steps: @@ -13,7 +13,7 @@ runs: python-version: ${{ inputs.python-version }} - uses: abatilo/actions-poetry@v2 with: - poetry-version: 1.4.2 + poetry-version: 1.8.2 - name: Poetry install run: poetry install shell: bash diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 66b76b03..9970167f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,7 +32,7 @@ jobs: exasol_version: - "default" python_version: - - 3.8 + - 3.10 test-path: ${{fromJson(needs.prep-testbed.outputs.matrix)}} runs-on: ubuntu-latest name: ${{ matrix.test-path.name }} diff --git a/README.md b/README.md index 7b23731e..bb26b0b2 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ the following prerequisites: * sha512sum * sed * [curl](https://curl.se/) - * Python 3 (>=3.8) + * Python 3 (>=3.10) * Pip diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index bc2d5f97..94f5b3e8 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [0.19.0](changes_0.19.0.md) * [0.18.3](changes_0.18.3.md) * [0.18.2](changes_0.18.2.md) * [0.18.1](changes_0.18.1.md) diff --git a/doc/changes/changes_0.19.0.md b/doc/changes/changes_0.19.0.md new file mode 100644 index 00000000..4101f044 --- /dev/null +++ b/doc/changes/changes_0.19.0.md @@ -0,0 +1,12 @@ +# Script-Languages-Container-Tool 0.19.0, released 2024-05-22 + +Code name: Updated dependencies + +## Summary + +This releases updated the dependency to exasol-integration-test-docker-environment. + +## Refactorings + +- #212: Updating dependencies and Python + diff --git a/docker_runner/Dockerfile b/docker_runner/Dockerfile index c27e8808..aa2e794d 100644 --- a/docker_runner/Dockerfile +++ b/docker_runner/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive COPY ext/01_nodoc /etc/dpkg/dpkg.cfg.d/01_nodoc @@ -7,7 +7,7 @@ RUN apt-get -y update && \ apt-get -y install --no-install-recommends\ ca-certificates \ locales \ - python3.8-venv \ + python3.10-venv \ git \ bash \ curl && \ @@ -17,7 +17,7 @@ RUN apt-get -y update && \ apt-get -y autoremove && \ ldconfig -RUN curl https://bootstrap.pypa.io/get-pip.py | python3.8 +RUN curl https://bootstrap.pypa.io/get-pip.py | python3.10 ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 @@ -30,7 +30,7 @@ COPY LICENSE /script-languages-container-tool/LICENSE COPY README.md /script-languages-container-tool/README.md WORKDIR /script-languages-container-tool -RUN python3.8 -m pip install . +RUN python3.10 -m pip install . RUN mkdir -p runner COPY docker_runner/ /docker_runner diff --git a/exasol_script_languages_container_tool/cli/commands/run_db_tests.py b/exasol_script_languages_container_tool/cli/commands/run_db_tests.py index 4f00390f..47a5c659 100644 --- a/exasol_script_languages_container_tool/cli/commands/run_db_tests.py +++ b/exasol_script_languages_container_tool/cli/commands/run_db_tests.py @@ -94,6 +94,7 @@ def run_db_test(flavor_path: Tuple[str, ...], external_exasol_db_host: Optional[str], external_exasol_db_port: int, external_exasol_bucketfs_port: int, + external_exasol_ssh_port: Optional[int], external_exasol_db_user: Optional[str], external_exasol_db_password: Optional[str], external_exasol_bucketfs_write_password: Optional[str], @@ -161,6 +162,7 @@ def run_db_test(flavor_path: Tuple[str, ...], external_exasol_bucketfs_port=external_exasol_bucketfs_port, external_exasol_db_user=external_exasol_db_user, external_exasol_db_password=external_exasol_db_password, + external_exasol_ssh_port=external_exasol_ssh_port, external_exasol_bucketfs_write_password=external_exasol_bucketfs_write_password, external_exasol_xmlrpc_host=external_exasol_xmlrpc_host, external_exasol_xmlrpc_port=external_exasol_xmlrpc_port, diff --git a/exasol_script_languages_container_tool/lib/api/run_db_tests.py b/exasol_script_languages_container_tool/lib/api/run_db_tests.py index 01e7cbb8..145d61e5 100644 --- a/exasol_script_languages_container_tool/lib/api/run_db_tests.py +++ b/exasol_script_languages_container_tool/lib/api/run_db_tests.py @@ -5,6 +5,8 @@ from exasol_integration_test_docker_environment.lib.api.common import run_task, generate_root_task, \ set_docker_repository_config, set_build_config, import_build_steps, cli_function from exasol_integration_test_docker_environment.lib.base.dependency_logger_base_task import DependencyLoggerBaseTask +from exasol_integration_test_docker_environment.lib.test_environment.parameter.docker_db_test_environment_parameter import \ + DbOsAccess from exasol_script_languages_container_tool.lib.api import api_errors from exasol_script_languages_container_tool.lib.tasks.test.test_container import TestContainer, AllTestsResult @@ -30,7 +32,8 @@ def run_db_test(flavor_path: Tuple[str, ...], additional_db_parameter: Tuple[str, ...] = tuple(), external_exasol_db_host: Optional[str] = None, external_exasol_db_port: int = 8563, - external_exasol_bucketfs_port: int = 6583, + external_exasol_bucketfs_port: int = 2580, + external_exasol_ssh_port: Optional[int] = None, external_exasol_db_user: Optional[str] = None, external_exasol_db_password: Optional[str] = None, external_exasol_bucketfs_write_password: Optional[str] = None, @@ -125,6 +128,7 @@ def root_task_generator() -> DependencyLoggerBaseTask: reuse_database_setup=reuse_database_setup, reuse_test_container=reuse_test_container, reuse_database=reuse_database, + db_os_access=DbOsAccess[db_os_access], no_test_container_cleanup_after_success=reuse_test_container, no_test_container_cleanup_after_failure=reuse_test_container, no_database_cleanup_after_success=reuse_database, @@ -137,6 +141,7 @@ def root_task_generator() -> DependencyLoggerBaseTask: external_exasol_bucketfs_port=external_exasol_bucketfs_port, external_exasol_db_user=external_exasol_db_user, external_exasol_db_password=external_exasol_db_password, + external_exasol_ssh_port=external_exasol_ssh_port, external_exasol_bucketfs_write_password=external_exasol_bucketfs_write_password, external_exasol_xmlrpc_host=external_exasol_xmlrpc_host, external_exasol_xmlrpc_port=external_exasol_xmlrpc_port, diff --git a/exasol_script_languages_container_tool/lib/tasks/test/run_db_test.py b/exasol_script_languages_container_tool/lib/tasks/test/run_db_test.py index fd0f61bd..b13f4452 100644 --- a/exasol_script_languages_container_tool/lib/tasks/test/run_db_test.py +++ b/exasol_script_languages_container_tool/lib/tasks/test/run_db_test.py @@ -106,7 +106,7 @@ def run_test_command(self, docker_client: docker.client, bash_cmd: str, def generate_test_command(self) -> str: credentials = f"--user '{self.db_user}' --password '{self.db_password}'" log_level = f"--loglevel={self.test_log_level}" - server = f"--server '{self._database_info.host}:{self._database_info.db_port}'" + server = f"--server '{self._database_info.host}:{self._database_info.ports.database}'" environment = "--driver=/downloads/ODBC/lib/linux/x86_64/libexaodbc-uo2214lv2.so " \ "--jdbc-path /downloads/JDBC/exajdbc.jar" language_definition = f"--script-languages '{self.language_definition}'" diff --git a/exasol_script_languages_container_tool/lib/tasks/test/test_runner_db_test_task.py b/exasol_script_languages_container_tool/lib/tasks/test/test_runner_db_test_task.py index ad6dc79c..776e172d 100644 --- a/exasol_script_languages_container_tool/lib/tasks/test/test_runner_db_test_task.py +++ b/exasol_script_languages_container_tool/lib/tasks/test/test_runner_db_test_task.py @@ -2,6 +2,14 @@ from typing import Generator, Any, Dict import luigi +from docker.models.containers import ExecResult +from exasol_integration_test_docker_environment.lib.base.db_os_executor import DbOsExecFactory, SshExecFactory, \ + DockerClientFactory, DockerExecFactory, DbOsExecutor +from exasol_integration_test_docker_environment.lib.base.json_pickle_parameter import JsonPickleParameter +from exasol_integration_test_docker_environment.lib.data.database_info import DatabaseInfo +from exasol_integration_test_docker_environment.lib.test_environment.parameter.docker_db_test_environment_parameter import \ + DbOsAccess + from exasol_script_languages_container_tool.lib.tasks.export.export_containers import ExportFlavorContainer from exasol_script_languages_container_tool.lib.tasks.export.export_info import ExportInfo from exasol_script_languages_container_tool.lib.tasks.test.populate_test_engine import PopulateTestEngine @@ -19,6 +27,26 @@ from exasol_integration_test_docker_environment.lib.test_environment.spawn_test_environment import SpawnTestEnvironment +class DummyExecutor(DbOsExecutor): + + def exec(self, cmd: str) -> ExecResult: + raise RuntimeError("Not supposed to be called.") + + def prepare(self): + pass + + def __enter__(self): + return self + + def __exit__(self, type_, value, traceback): + pass + + +class DummyExecFactory(DbOsExecFactory): + def executor(self) -> DbOsExecutor: + return DummyExecutor() + + class TestRunnerDBTestTask(FlavorBaseTask, SpawnTestEnvironmentParameter, RunDBTestsInTestConfigParameter): @@ -63,6 +91,15 @@ def run_task(self): test_results = yield from self.run_test(self.test_environment_info, export_info) self.return_object(test_results) + def _executor_factory(self, database_info: DatabaseInfo) -> DbOsExecFactory: + + if self.db_os_access == DbOsAccess.SSH: + return SshExecFactory.from_database_info(database_info) + client_factory = DockerClientFactory(timeout=100000) + if database_info.container_info is not None: + return DockerExecFactory(database_info.container_info.container_name, client_factory) + return DummyExecFactory() + def upload_container(self, database_credentials: DatabaseCredentials, export_info: ExportInfo): reuse = \ self.reuse_database and \ @@ -75,7 +112,8 @@ def upload_container(self, database_credentials: DatabaseCredentials, export_inf test_environment_info=self.test_environment_info, release_name=export_info.name, reuse_uploaded=reuse, - bucketfs_write_password=database_credentials.bucketfs_write_password + bucketfs_write_password=database_credentials.bucketfs_write_password, + executor_factory=self._executor_factory(self.test_environment_info.database_info) ) yield from self.run_dependencies(upload_task) diff --git a/poetry.lock b/poetry.lock index 06a8636a..fc736d26 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,50 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "anyio" +version = "4.3.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "attrs" +version = "23.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "bcrypt" version = "4.1.3" description = "Modern password hashing for your software and your servers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -45,7 +85,6 @@ typecheck = ["mypy"] name = "certifi" version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -57,7 +96,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -122,7 +160,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -222,7 +259,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -237,7 +273,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -249,7 +284,6 @@ files = [ name = "configobj" version = "5.0.8" description = "Config file reading, writing and validation." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -264,7 +298,6 @@ six = "*" name = "cryptography" version = "42.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -319,7 +352,6 @@ test-randomorder = ["pytest-randomly"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -331,7 +363,6 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -349,7 +380,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "docker" version = "6.1.3" description = "A Python library for the Docker Engine API." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -368,49 +398,61 @@ ssh = ["paramiko (>=2.4.3)"] [[package]] name = "docutils" -version = "0.20.1" +version = "0.21.2" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, - {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] [[package]] name = "exasol-bucketfs" -version = "0.9.0" +version = "0.10.0" description = "BucketFS utilities for the Python programming language" -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "exasol_bucketfs-0.9.0-py3-none-any.whl", hash = "sha256:7264ff60a87ecd709595babf90de99bf46e1e81b39041069c6008c4393eae8a8"}, - {file = "exasol_bucketfs-0.9.0.tar.gz", hash = "sha256:209689248cd0212c92f97555adac0a0a1a741346e33abf277341a3f9b3c80335"}, + {file = "exasol_bucketfs-0.10.0-py3-none-any.whl", hash = "sha256:4f5aa81c31c5e03f19daa04d8b455ed09740f9e82bc53f3f9cb47db025146625"}, + {file = "exasol_bucketfs-0.10.0.tar.gz", hash = "sha256:033ee923728037af4d7771d9c6855e9eed2389d842c98a8456f937c917c395f8"}, ] [package.dependencies] +attrs = ">=23.2.0" +exasol-saas-api = ">=0.3.0" +httpx = ">=0.27.0" joblib = ">=1.0.1" requests = ">=2.24.0" typeguard = "4.0.0" +[[package]] +name = "exasol-error-reporting" +version = "0.4.0" +description = "Exasol Python Error Reporting" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "exasol_error_reporting-0.4.0-py3-none-any.whl", hash = "sha256:851aed9fd95bc3c6a566ba174a8052897442bfe503c9b8858faab26e3d6f0153"}, + {file = "exasol_error_reporting-0.4.0.tar.gz", hash = "sha256:a0bc5056aa23df97eb47d2da95d112d9b2dcd5295016fdefac2fc7aa5e7eea19"}, +] + [[package]] name = "exasol-integration-test-docker-environment" -version = "1.7.1" +version = "3.0.0" description = "Integration Test Docker Environment for Exasol" -category = "main" optional = false python-versions = ">=3.8,<4" files = [ - {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"}, + {file = "exasol_integration_test_docker_environment-3.0.0-py3-none-any.whl", hash = "sha256:0c041f7a0acb10fd4fee5dcf159984fcd347f123566f761fb8ec3e495570e778"}, + {file = "exasol_integration_test_docker_environment-3.0.0.tar.gz", hash = "sha256:4ca6ee1e3b60c0e8bb0adc13625276a5ccfc0fb749393dd3daf904eede246860"}, ] [package.dependencies] click = ">=7.0" -docker = {version = ">=4.0.0", markers = "sys_platform != \"win32\""} +docker = {version = ">=4.0.0,<7.0.0", markers = "sys_platform != \"win32\""} exasol-bucketfs = ">=0.6.0,<2.0.0" +exasol-error-reporting = ">=0.4.0,<0.5.0" fabric = ">=3.0.1,<4.0.0" gitpython = ">=2.1.0" humanfriendly = ">=4.18" @@ -422,17 +464,35 @@ 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" requests = ">=2.21.0" simplejson = ">=3.16.0" "stopwatch.py" = ">=1.0.0" +[[package]] +name = "exasol-saas-api" +version = "0.5.0" +description = "API enabling Python applications connecting to Exasol database SaaS instances and using their SaaS services" +optional = false +python-versions = "<4.0,>=3.8.0" +files = [ + {file = "exasol_saas_api-0.5.0-py3-none-any.whl", hash = "sha256:a2b81ad4100dc6d2f0f8dc6d0e2b18a0f67d04c3f7d2eb117e8038fe9db87eee"}, + {file = "exasol_saas_api-0.5.0.tar.gz", hash = "sha256:164f31c23fc54ddda18b0a881880b91cff6cd07926f73c154a9b8f44f4cf9575"}, +] + +[package.dependencies] +attrs = ">=21.3.0" +httpx = ">=0.20.0,<0.28.0" +ifaddr = ">=0.2.0,<0.3.0" +python-dateutil = ">=2.8.0,<3.0.0" +requests = ">=2.31.0,<3.0.0" +tenacity = ">=8.2.3,<9.0.0" +types-requests = ">=2.31.0.6,<3.0.0.0" + [[package]] name = "exceptiongroup" version = "1.2.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -447,7 +507,6 @@ test = ["pytest (>=6)"] name = "fabric" version = "3.2.2" description = "High level SSH command execution" -category = "main" optional = false python-versions = "*" files = [ @@ -468,7 +527,6 @@ pytest = ["pytest (>=7)"] name = "gitdb" version = "4.0.11" description = "Git Object Database" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -483,7 +541,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.43" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -498,11 +555,66 @@ gitdb = ">=4.0.1,<5" doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + [[package]] name = "humanfriendly" version = "10.0" description = "Human friendly output for text interfaces using Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -517,7 +629,6 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -525,11 +636,21 @@ files = [ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] +[[package]] +name = "ifaddr" +version = "0.2.0" +description = "Cross-platform network interface and IP address enumeration library" +optional = false +python-versions = "*" +files = [ + {file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"}, + {file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"}, +] + [[package]] name = "importlib-metadata" version = "7.1.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -549,7 +670,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", name = "importlib-resources" version = "6.4.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -557,9 +677,6 @@ files = [ {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] @@ -568,7 +685,6 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -580,7 +696,6 @@ files = [ name = "invoke" version = "2.2.0" description = "Pythonic task execution" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -592,7 +707,6 @@ files = [ name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -610,7 +724,6 @@ i18n = ["Babel (>=2.7)"] name = "joblib" version = "1.4.2" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -622,7 +735,6 @@ files = [ name = "jsonpickle" version = "3.0.4" description = "Serialize any Python object to JSON" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -639,7 +751,6 @@ testing = ["bson", "ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", name = "lockfile" version = "0.12.2" description = "Platform-independent file locking module" -category = "main" optional = false python-versions = "*" files = [ @@ -649,13 +760,12 @@ files = [ [[package]] name = "luigi" -version = "3.5.0" +version = "3.5.1" description = "Workflow mgmgt + task scheduling + dependency resolution." -category = "main" optional = false python-versions = "*" files = [ - {file = "luigi-3.5.0.tar.gz", hash = "sha256:d3ede04966655c13bc4f473f6390268c62e83c4c4540d78936c4f12496e4f128"}, + {file = "luigi-3.5.1.tar.gz", hash = "sha256:fc790b2747515dd19c673efbb8e4c9ace5f4c5cdc31f8e7f93dc667deb2ec6c8"}, ] [package.dependencies] @@ -673,7 +783,6 @@ toml = ["toml (<2.0.0)"] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -743,7 +852,6 @@ files = [ name = "netaddr" version = "1.2.1" description = "A network address manipulation library for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -758,7 +866,6 @@ nicer-shell = ["ipython"] name = "networkx" version = "2.8.2" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -777,7 +884,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.1)", "pytest-cov (>=3.0)"] name = "packaging" version = "24.0" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -789,7 +895,6 @@ files = [ name = "paramiko" version = "3.4.0" description = "SSH2 protocol library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -811,7 +916,6 @@ invoke = ["invoke (>=2.0)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -827,7 +931,6 @@ testing = ["pytest", "pytest-benchmark"] name = "portalocker" version = "2.8.2" description = "Wraps the portalocker recipe for easy usage" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -843,23 +946,10 @@ 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)", "types-redis"] -[[package]] -name = "pyasn1" -version = "0.6.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, - {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, -] - [[package]] name = "pycparser" version = "2.22" description = "C parser in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -871,7 +961,6 @@ files = [ name = "pydot" version = "2.0.0" description = "Python interface to Graphviz's Dot" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -887,36 +976,10 @@ dev = ["black", "chardet"] release = ["zest.releaser[recommended]"] tests = ["black", "chardet", "tox"] -[[package]] -name = "pyexasol" -version = "0.25.2" -description = "Exasol python driver with extra features" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyexasol-0.25.2-py3-none-any.whl", hash = "sha256:54be5c75f0867a4838b84b5b5a37466c33fa9b1ca6bf51d9c3d821d367936e6e"}, - {file = "pyexasol-0.25.2.tar.gz", hash = "sha256:3b42cb2c32b7b2ffe7a78c82bf21c3a391043758f2a575c48460252a72386691"}, -] - -[package.dependencies] -packaging = "*" -pyopenssl = "*" -rsa = "*" -websocket-client = ">=1.0.1" - -[package.extras] -examples = ["pproxy"] -orjson = ["orjson (>=3.6)"] -pandas = ["pandas"] -rapidjson = ["python-rapidjson"] -ujson = ["ujson"] - [[package]] name = "pynacl" version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -939,30 +1002,10 @@ cffi = ">=1.4.1" docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] -[[package]] -name = "pyopenssl" -version = "24.1.0" -description = "Python wrapper module around the OpenSSL library" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyOpenSSL-24.1.0-py3-none-any.whl", hash = "sha256:17ed5be5936449c5418d1cd269a1a9e9081bc54c17aed272b45856a3d3dc86ad"}, - {file = "pyOpenSSL-24.1.0.tar.gz", hash = "sha256:cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f"}, -] - -[package.dependencies] -cryptography = ">=41.0.5,<43" - -[package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] -test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] - [[package]] name = "pyparsing" version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -977,7 +1020,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyreadline3" version = "3.4.1" description = "A python implementation of GNU readline." -category = "main" optional = false python-versions = "*" files = [ @@ -989,7 +1031,6 @@ files = [ name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1012,7 +1053,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "python-daemon" version = "3.0.1" description = "Library to implement a well-behaved Unix daemon process." -category = "main" optional = false python-versions = ">=3" files = [ @@ -1033,7 +1073,6 @@ test = ["coverage", "docutils", "testscenarios (>=0.4)", "testtools"] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1048,7 +1087,6 @@ six = ">=1.5" name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -1072,7 +1110,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1090,43 +1127,25 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -category = "main" -optional = false -python-versions = ">=3.6,<4" -files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, -] - -[package.dependencies] -pyasn1 = ">=0.1.3" - [[package]] name = "setuptools" -version = "69.5.1" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "simplejson" version = "3.19.2" description = "Simple, fast, extensible JSON encoder/decoder for Python" -category = "main" optional = false python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1234,7 +1253,6 @@ files = [ name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1246,7 +1264,6 @@ files = [ name = "smmap" version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1254,11 +1271,21 @@ files = [ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "stopwatch-py" version = "2.0.1" description = "A simple stopwatch for python" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1270,7 +1297,6 @@ files = [ name = "tenacity" version = "8.3.0" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1286,7 +1312,6 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1298,7 +1323,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1310,7 +1334,6 @@ files = [ name = "tornado" version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ @@ -1331,7 +1354,6 @@ files = [ name = "typeguard" version = "4.0.0" description = "Run-time type checker for Python" -category = "main" optional = false python-versions = ">=3.7.4" files = [ @@ -1340,18 +1362,30 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.11\""} [package.extras] doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] test = ["mypy (>=1.2.0)", "pytest (>=7)"] +[[package]] +name = "types-requests" +version = "2.32.0.20240521" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.32.0.20240521.tar.gz", hash = "sha256:c5c4a0ae95aad51f1bf6dae9eed04a78f7f2575d4b171da37b622e08b93eb5d3"}, + {file = "types_requests-2.32.0.20240521-py3-none-any.whl", hash = "sha256:ab728ba43ffb073db31f21202ecb97db8753ded4a9dc49cb480d8a5350c5c421"}, +] + +[package.dependencies] +urllib3 = ">=2" + [[package]] name = "typing-extensions" version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1363,7 +1397,6 @@ files = [ name = "urllib3" version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1381,7 +1414,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "websocket-client" version = "1.8.0" description = "WebSocket client for Python with low level API options" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1398,7 +1430,6 @@ test = ["websockets"] name = "wrapt" version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1476,21 +1507,20 @@ files = [ [[package]] name = "zipp" -version = "3.18.1" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" -python-versions = ">=3.8,<4" -content-hash = "7f871d3b89ccfddb9dea6be07ae6dddf98927122e299e698f0dda1146b5384c2" +python-versions = ">=3.10,<4" +content-hash = "052abcae475bc78ddd06e62e69265e6dba79890195def0de725ae0702b44ab8a" diff --git a/pyproject.toml b/pyproject.toml index 98965925..3a3bf8ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "exasol-script-languages-container-tool" -version = "0.18.3" +version = "0.19.0" description = "Script Languages Container Tool" license = "MIT" @@ -17,20 +17,12 @@ homepage = "https://github.com/exasol/script-languages-container-tool" keywords = ['exasol', 'udf', 'script-languages'] [tool.poetry.dependencies] -python = ">=3.8,<4" +python = ">=3.10,<4" importlib_metadata = ">=4.6.0" importlib-resources = ">=5.4.0" networkx = "2.8.2" # We pinned networkx to this version, because in newer versions it throws an exception, see https://github.com/exasol/integration-test-docker-environment/issues/228 -exasol-integration-test-docker-environment = "^1.7.1" -docker = { version = ">=4.0.0,<7.0.0", markers = "sys_platform != 'win32'" } - -# The current combination of dependencies for SLCT and Luigi is not compatible with projects that run on Python 3.8. -# The latest version of docutils, version 0.21.1, is required to run on Python 3.9 or higher. -# As a temporary fix, until support for Python 3.8 is dropped (which is estimated to be around 6 months), -# we are explicitly requiring a version of docutils that is less than or equal to 0.20.1 in SLCT. -# Once support for Python 3.8 is dropped, this dependency can be removed as it is only needed as a transitive dependency. -docutils = "<=0.20.1" - +exasol-integration-test-docker-environment = "^3.0.0" +requests="2.31.0" # Pinned because of https://github.com/psf/requests/issues/6707 / https://github.com/docker/docker-py/issues/3256 [build-system] requires = ["poetry_core>=1.0.0"] diff --git a/scripts/build/poetry_utils.sh b/scripts/build/poetry_utils.sh index fb469879..bee13204 100644 --- a/scripts/build/poetry_utils.sh +++ b/scripts/build/poetry_utils.sh @@ -57,7 +57,7 @@ check_poetry() { check_python_version() { echo -n "Python available? " if [ -z "$PYTHON_BIN" ]; then - ACCEPTABLE_PYTHON_EXECUTABLES=("python3.8" "python3.9" "python3.10") + ACCEPTABLE_PYTHON_EXECUTABLES=("python3.10" "python3.11" "python3.12") for python_executable in "${ACCEPTABLE_PYTHON_EXECUTABLES[@]}"; do PYTHON_BIN=$(command -v "$python_executable") if [ -n "$PYTHON_BIN" ]; then @@ -66,7 +66,7 @@ check_python_version() { done if [ -z "$PYTHON_BIN" ]; then echo "[Not found]" - echo "Found no compatible Python executable, please install Python 3.8+ or set the environment variable PYTHON_BIN to the path of the Python executable." + echo "Found no compatible Python executable, please install Python 3.10+ or set the environment variable PYTHON_BIN to the path of the Python executable." echo "Aborting" exit 1 fi diff --git a/scripts/test/ci_tests/Ubuntu20.04/Dockerfile b/scripts/test/ci_tests/Ubuntu20.04/Dockerfile index 43f50d52..b61c8465 100644 --- a/scripts/test/ci_tests/Ubuntu20.04/Dockerfile +++ b/scripts/test/ci_tests/Ubuntu20.04/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG DEBIAN_FRONTEND=noninteractive diff --git a/test/resources/test_container/full/build/deps/requirements.txt b/test/resources/test_container/full/build/deps/requirements.txt index c32a64a5..69717cf9 100644 --- a/test/resources/test_container/full/build/deps/requirements.txt +++ b/test/resources/test_container/full/build/deps/requirements.txt @@ -2,5 +2,7 @@ pyodbc<5.0.0 pytz lxml docker +numpy scipy +requests==2.31.0 https://github.com/exasol/exasol-python-test-framework/releases/download/0.1.0/exasol_python_test_framework-0.1.0-py3-none-any.whl diff --git a/test/resources/test_container/mock/build/Dockerfile b/test/resources/test_container/mock/build/Dockerfile index 4b5dbe5a..a7e03d08 100644 --- a/test/resources/test_container/mock/build/Dockerfile +++ b/test/resources/test_container/mock/build/Dockerfile @@ -1 +1 @@ -FROM ubuntu:20.04 \ No newline at end of file +FROM ubuntu:22.04 \ No newline at end of file diff --git a/test/test_docker_upload.py b/test/test_docker_upload.py index e2c5cc6f..5ce03dd1 100644 --- a/test/test_docker_upload.py +++ b/test/test_docker_upload.py @@ -32,7 +32,7 @@ def test_docker_upload_with_path_in_bucket(self): self.bucket_name = "default" arguments = " ".join([ f"--database-host {self.docker_environment.database_host}", - f"--bucketfs-port {self.docker_environment.bucketfs_port}", + f"--bucketfs-port {self.docker_environment.ports.bucketfs}", f"--bucketfs-username {self.docker_environment.bucketfs_username}", f"--bucketfs-password {self.docker_environment.bucketfs_password}", f"--bucketfs-name {self.bucketfs_name}", @@ -59,7 +59,7 @@ def test_docker_upload_without_path_in_bucket(self): self.bucket_name = "default" arguments = " ".join([ f"--database-host {self.docker_environment.database_host}", - f"--bucketfs-port {self.docker_environment.bucketfs_port}", + f"--bucketfs-port {self.docker_environment.ports.bucketfs}", f"--bucketfs-username {self.docker_environment.bucketfs_username}", f"--bucketfs-password {self.docker_environment.bucketfs_password}", f"--bucketfs-name {self.bucketfs_name}", @@ -84,7 +84,7 @@ def test_docker_upload_fail_path_in_bucket(self): self.bucket_name = "default" arguments = " ".join([ f"--database-host {self.docker_environment.database_host}", - f"--bucketfs-port {self.docker_environment.bucketfs_port}", + f"--bucketfs-port {self.docker_environment.ports.bucketfs}", f"--bucketfs-username {self.docker_environment.bucketfs_username}", f"--bucketfs-password invalid", f"--bucketfs-name {self.bucketfs_name}", @@ -103,7 +103,7 @@ def test_docker_upload_fail_path_in_bucket(self): def validate_file_on_bucket_fs(self, expected_file_path: str): url = "http://w:{password}@{host}:{port}/{bucket}".format( - host=self.docker_environment.database_host, port=self.docker_environment.bucketfs_port, + host=self.docker_environment.database_host, port=self.docker_environment.ports.bucketfs, bucket=self.bucket_name, password=self.docker_environment.bucketfs_password) cmd = ["curl", "--silent", "--show-error", "--fail", url] p = subprocess.run(cmd, capture_output=True) diff --git a/test/test_run_db_test_external_db.py b/test/test_run_db_test_external_db.py index 79c9bfb6..85dae91a 100644 --- a/test/test_run_db_test_external_db.py +++ b/test/test_run_db_test_external_db.py @@ -23,8 +23,9 @@ def test_run_db_tests_external_db(self): arguments = " ".join([ f"--environment-type external_db", f"--external-exasol-db-host {self.docker_environment.database_host}", - f"--external-exasol-db-port {self.docker_environment.database_port}", - f"--external-exasol-bucketfs-port {self.docker_environment.bucketfs_port}", + f"--external-exasol-db-port {self.docker_environment.ports.database}", + f"--external-exasol-bucketfs-port {self.docker_environment.ports.bucketfs}", + f"--external-exasol-ssh-port {self.docker_environment.ports.ssh}", f"--external-exasol-db-user {self.docker_environment.db_username}", f"--external-exasol-db-password {self.docker_environment.db_password}", f"--external-exasol-bucketfs-write-password {self.docker_environment.bucketfs_password}",