From 440628e3e6f15234e4de327294bdce070f6d2507 Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Mon, 4 Dec 2023 10:14:38 +0100 Subject: [PATCH] Streamline error message * Add exasol-error-reporting library * Replace custom errors with errors based on exasol.error.ExaError --- doc/changes/changelog.md | 2 + doc/changes/unreleased.md | 13 ++ .../doctor.py | 47 ++++--- .../lib/api/health.py | 23 +--- .../test/test_doctor.py | 6 +- poetry.lock | 118 ++++-------------- pyproject.toml | 1 + 7 files changed, 74 insertions(+), 136 deletions(-) create mode 100644 doc/changes/unreleased.md diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index 5b58aa0e0..b6ddebc04 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [unreleased](unreleased.md) * [2.0.0](changes_2.0.0.md) * [1.7.1](changes_1.7.1.md) * [1.7.0](changes_1.7.0.md) @@ -29,6 +30,7 @@ --- hidden: --- +unreleased changes_2.0.0 changes_1.7.1 changes_1.7.0 diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md new file mode 100644 index 000000000..d505609ae --- /dev/null +++ b/doc/changes/unreleased.md @@ -0,0 +1,13 @@ +# Unreleased + +## Summary + +### Supported Exasol Versions + +* **7.1**: up to 7.1.17 +* **8**: 8.18.1 + +## Internal + +* #184: Streamlined error messages + * Added exasol-error-reporting library diff --git a/exasol_integration_test_docker_environment/doctor.py b/exasol_integration_test_docker_environment/doctor.py index 4a5555b8e..fb424c5f7 100644 --- a/exasol_integration_test_docker_environment/doctor.py +++ b/exasol_integration_test_docker_environment/doctor.py @@ -3,8 +3,9 @@ package and also provide help to find potential fixes. """ import sys +from typing import Iterable +from exasol import error from enum import Enum -from typing import Iterator import docker from docker.errors import DockerException @@ -12,38 +13,44 @@ SUPPORTED_PLATFORMS = ["linux", "darwin"] -class ErrorCodes(Enum): - """The equivalent of ICD-10 codes this doctor is using""" +class Error(Enum): + Unknown = error.ExaError( + "E-ITDE-0", + "Unknown issue.", + ["An unknown error occurred, please contact the maintainer."], + {} + ) - Unknown = "Unknown issue" - UnixSocketNotAvailable = "Could not find unix socket to connect to" - TargetPlatformNotSupported = "The platform you are running on is not supported." + UnixSocketNotAvailable = error.ExaError( + "E-ITDE-1", + "Could not find unix socket to connect to.", + ["Make sure your DOCKER_HOST environment variable is configured correctly."], + {} + ) + TargetPlatformNotSupported = error.ExaError( + "E-ITDE-2", + "The platform you are running on is not supported.", + ["Make sure you are using one of the following platforms: [linux, darwin]."], + {} + ) -def recommend_mitigation(error_code) -> str: - """Get treatment advice based on the error_code""" - return { - ErrorCodes.Unknown: "You are sick but this symptoms are unknown, please contact the maintainer.", - ErrorCodes.UnixSocketNotAvailable: "Make sure your DOCKER_HOST environment variable is configured correctly.", - ErrorCodes.TargetPlatformNotSupported: f"Make sure you are using one of the following platforms: {SUPPORTED_PLATFORMS}.", - }[error_code] - -def diagnose_docker_daemon_not_available() -> Iterator[ErrorCodes]: +def diagnose_docker_daemon_not_available() -> Iterable[error.ExaError]: """Diagnose reasons why docker deamon is not available""" def _is_unix_socket_issue(message: str) -> bool: return "FileNotFoundError(2, 'No such file or directory')" in message - errors = set() + errors = list() try: _docker = docker.from_env() except DockerException as ex: msg = f"{ex}" if _is_unix_socket_issue(msg): - errors.add(ErrorCodes.UnixSocketNotAvailable) + errors.append(Error.UnixSocketNotAvailable) if len(errors) == 0: - errors.add(ErrorCodes.Unknown) + errors.append(Error.Unknown) return errors @@ -65,7 +72,7 @@ def is_supported_platform() -> bool: return sys.platform in SUPPORTED_PLATFORMS -def health_checkup() -> Iterator[ErrorCodes]: +def health_checkup() -> Iterable[error.ExaError]: """ Runs all known examinations @@ -73,7 +80,7 @@ def health_checkup() -> Iterator[ErrorCodes]: """ examinations = [ (is_docker_daemon_available, diagnose_docker_daemon_not_available), - (is_supported_platform, lambda: ErrorCodes.TargetPlatformNotSupported), + (is_supported_platform, lambda: Error.TargetPlatformNotSupported), ] for is_fine, diagnosis in examinations: if not is_fine(): diff --git a/exasol_integration_test_docker_environment/lib/api/health.py b/exasol_integration_test_docker_environment/lib/api/health.py index c3f941c88..9e524a0b7 100644 --- a/exasol_integration_test_docker_environment/lib/api/health.py +++ b/exasol_integration_test_docker_environment/lib/api/health.py @@ -1,6 +1,6 @@ from inspect import cleandoc -from exasol_integration_test_docker_environment.doctor import health_checkup, recommend_mitigation +from exasol_integration_test_docker_environment.doctor import health_checkup from exasol_integration_test_docker_environment.lib.api.api_errors import HealthProblem from exasol_integration_test_docker_environment.lib.api.common import cli_function @@ -17,16 +17,10 @@ def health(): :raises HealthProblem """ - problems = set(health_checkup()) - if not problems: + errors = set(health_checkup()) + if not errors: return - suggestion_template = cleandoc( - """ - * {problem} - Fix: {suggestion} - """ - ) message = cleandoc( """ {count} problem(s) have been identified. @@ -34,14 +28,7 @@ def health(): {problems} """ ).format( - count=len(problems), - problems="\n".join( - ( - suggestion_template.format( - problem=icd.value, suggestion=recommend_mitigation(icd) - ) - for icd in problems - ) - ), + count=len(errors), + problems="\n".join(f"{error.value}" for error in errors), ) raise HealthProblem(message) diff --git a/exasol_integration_test_docker_environment/test/test_doctor.py b/exasol_integration_test_docker_environment/test/test_doctor.py index 127a28f61..add497c86 100644 --- a/exasol_integration_test_docker_environment/test/test_doctor.py +++ b/exasol_integration_test_docker_environment/test/test_doctor.py @@ -6,7 +6,7 @@ from exasol_integration_test_docker_environment.doctor import ( SUPPORTED_PLATFORMS, - ErrorCodes, + Error, diagnose_docker_daemon_not_available, is_docker_daemon_available, is_supported_platform, @@ -56,13 +56,13 @@ class DiagnoseDockerDaemonNotAvailable(unittest.TestCase): """ def test_non_existing_unix_socket(self): - expected = {ErrorCodes.UnixSocketNotAvailable} + expected = [Error.UnixSocketNotAvailable] env = {"DOCKER_HOST": "unix:///var/non/existent/path"} with temporary_env(env): self.assertEqual(expected, diagnose_docker_daemon_not_available()) def test_unknown_error(self): - expected = {ErrorCodes.Unknown} + expected = [Error.Unknown] env = {"DOCKER_HOST": "https://foobar"} with temporary_env(env): self.assertEqual(expected, diagnose_docker_daemon_not_available()) diff --git a/poetry.lock b/poetry.lock index 68b819c26..2f79bafd9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -16,7 +15,6 @@ files = [ name = "argcomplete" version = "2.1.2" description = "Bash tab completion for argparse" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -32,7 +30,6 @@ test = ["coverage", "flake8", "mypy", "pexpect", "wheel"] name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -47,7 +44,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} 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 = [ @@ -82,7 +78,6 @@ typecheck = ["mypy"] name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -101,7 +96,6 @@ lxml = ["lxml"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +107,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -190,7 +183,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.1.0" 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 = [ @@ -275,7 +267,6 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -290,7 +281,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 = [ @@ -302,7 +292,6 @@ files = [ name = "colorlog" version = "6.7.0" description = "Add colours to the output of Python's logging module." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -320,7 +309,6 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] name = "cryptography" 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 = [ @@ -362,7 +350,6 @@ test-randomorder = ["pytest-randomly"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -374,7 +361,6 @@ files = [ name = "distlib" version = "0.3.6" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -386,7 +372,6 @@ files = [ name = "docker" version = "6.1.3" description = "A Python library for the Docker Engine API." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -407,7 +392,6 @@ ssh = ["paramiko (>=2.4.3)"] name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -419,7 +403,6 @@ files = [ name = "exasol-bucketfs" version = "0.8.0" description = "BucketFS utilities for the Python programming language" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -432,11 +415,21 @@ joblib = ">=1.0.1" requests = ">=2.24.0" typeguard = ">=2.11.1,<3.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-sphinx-github-pages-generator" version = "0.1.1" description = "Generates Sphinx GitHub pages for a given Git Repository" -category = "dev" optional = false python-versions = ">=3.8,<4.0" files = [] @@ -460,7 +453,6 @@ resolved_reference = "9692e4384b6ba9cbede3ad8510523ebf4f36b830" name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -475,7 +467,6 @@ test = ["pytest (>=6)"] name = "fabric" version = "3.1.0" description = "High level SSH command execution" -category = "main" optional = false python-versions = "*" files = [ @@ -495,7 +486,6 @@ pytest = ["pytest (>=7)"] name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -511,7 +501,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "furo" version = "2022.9.29" description = "A clean customisable Sphinx documentation theme." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -529,7 +518,6 @@ sphinx-basic-ng = "*" name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -544,7 +532,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.31" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -559,7 +546,6 @@ gitdb = ">=4.0.1,<5" 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 = [ @@ -574,7 +560,6 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -586,7 +571,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -598,7 +582,6 @@ files = [ name = "importlib-metadata" version = "6.6.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -618,7 +601,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -637,7 +619,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -649,7 +630,6 @@ files = [ name = "invoke" version = "2.1.3" description = "Pythonic task execution" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -661,7 +641,6 @@ files = [ name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -679,7 +658,6 @@ i18n = ["Babel (>=2.7)"] name = "joblib" version = "1.2.0" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -691,7 +669,6 @@ files = [ name = "jsonpickle" version = "3.0.1" description = "Python library for serializing any arbitrary object graph into JSON" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -708,7 +685,6 @@ testing-libs = ["simplejson", "ujson"] name = "lockfile" version = "0.12.2" description = "Platform-independent file locking module" -category = "main" optional = false python-versions = "*" files = [ @@ -720,7 +696,6 @@ files = [ name = "luigi" version = "3.3.0" description = "Workflow mgmgt + task scheduling + dependency resolution." -category = "main" optional = false python-versions = "*" files = [ @@ -742,7 +717,6 @@ toml = ["toml (<2.0.0)"] name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -767,7 +741,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -791,6 +764,16 @@ files = [ {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-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {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"}, @@ -827,7 +810,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -847,7 +829,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -859,7 +840,6 @@ files = [ name = "mypy" version = "1.3.0" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -906,7 +886,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -918,7 +897,6 @@ files = [ name = "myst-parser" version = "0.17.2" description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -945,7 +923,6 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest name = "netaddr" version = "0.8.0" description = "A network address manipulation library for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -957,7 +934,6 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -976,7 +952,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nox" version = "2022.11.21" description = "Flexible test automation." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -997,7 +972,6 @@ tox-to-nox = ["jinja2", "tox"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1009,7 +983,6 @@ files = [ name = "paramiko" version = "3.2.0" description = "SSH2 protocol library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1031,7 +1004,6 @@ invoke = ["invoke (>=2.0)"] name = "platformdirs" version = "3.5.3" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1047,7 +1019,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1063,7 +1034,6 @@ testing = ["pytest", "pytest-benchmark"] name = "portalocker" version = "2.7.0" description = "Wraps the portalocker recipe for easy usage" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1083,7 +1053,6 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -1095,7 +1064,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1107,7 +1075,6 @@ files = [ name = "pydot" version = "1.4.2" description = "Python interface to Graphviz's Dot" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1122,7 +1089,6 @@ pyparsing = ">=2.1.4" name = "pyexasol" version = "0.25.2" description = "Exasol python driver with extra features" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1147,7 +1113,6 @@ ujson = ["ujson"] name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1162,7 +1127,6 @@ plugins = ["importlib-metadata"] 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 = [ @@ -1189,7 +1153,6 @@ tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] name = "pyopenssl" version = "23.2.0" description = "Python wrapper module around the OpenSSL library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1208,7 +1171,6 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -1223,7 +1185,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 = [ @@ -1235,7 +1196,6 @@ files = [ name = "pytest" version = "7.3.2" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1258,7 +1218,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 = [ @@ -1279,7 +1238,6 @@ test = ["coverage", "docutils", "testscenarios (>=0.4)", "testtools"] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1294,7 +1252,6 @@ six = ">=1.5" name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" files = [ @@ -1306,7 +1263,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -1330,7 +1286,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1380,7 +1335,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1402,7 +1356,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -1417,7 +1370,6 @@ pyasn1 = ">=0.1.3" name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1434,7 +1386,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "simplejson" version = "3.19.1" description = "Simple, fast, extensible JSON encoder/decoder for Python" -category = "main" optional = false python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1529,7 +1480,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 = [ @@ -1541,7 +1491,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1553,7 +1502,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -1565,7 +1513,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1577,7 +1524,6 @@ files = [ name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1613,7 +1559,6 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] name = "sphinx-basic-ng" version = "1.0.0b1" description = "A modern skeleton for Sphinx themes." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1631,7 +1576,6 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1647,7 +1591,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1663,7 +1606,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1679,7 +1621,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1694,7 +1635,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1710,7 +1650,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1726,7 +1665,6 @@ test = ["pytest"] name = "stopwatch-py" version = "2.0.1" description = "A simple stopwatch for python" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1738,7 +1676,6 @@ files = [ name = "tenacity" version = "8.2.2" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1753,7 +1690,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] 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 = [ @@ -1765,7 +1701,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1777,7 +1712,6 @@ files = [ name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ @@ -1798,7 +1732,6 @@ files = [ name = "typeguard" version = "2.13.3" description = "Run-time type checker for Python" -category = "main" optional = false python-versions = ">=3.5.3" files = [ @@ -1814,7 +1747,6 @@ test = ["mypy", "pytest", "typing-extensions"] name = "typing-extensions" version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1826,7 +1758,6 @@ files = [ name = "urllib3" version = "2.0.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1844,7 +1775,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "virtualenv" version = "20.23.0" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1865,7 +1795,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess name = "websocket-client" version = "1.5.3" description = "WebSocket client for Python with low level API options" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1882,7 +1811,6 @@ test = ["websockets"] name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1897,4 +1825,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = ">=3.8,<4" -content-hash = "5ec8ab7f85cb644a0d390a0058ba6957215d0bab718582c6156c3cdfc253ee1b" +content-hash = "5465ddd60489bf0e4cb775fadd634ff49fe3178f87a6a6565fb310e654a574c0" diff --git a/pyproject.toml b/pyproject.toml index a7c8513b5..a1929b1fc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ pytest = "^7.2.2" pyexasol = "^0.25.2" fabric = "^3.0.1" portalocker = "^2.7.0" +exasol-error-reporting = "^0.4.0" [tool.poetry.plugins.pytest11] itde = "pytest_itde"