From aca0ae775757d5f7bd871d948b0bdac9aff02e1c Mon Sep 17 00:00:00 2001 From: Nicola Coretti Date: Fri, 13 Dec 2024 13:13:48 +0100 Subject: [PATCH] Add support for multiversion documentation (#519) --- .github/workflows/ci-cd.yml | 2 +- .github/workflows/ci.yaml | 2 +- .github/workflows/gh-pages.yaml | 6 +- .github/workflows/link-check.yaml | 28 - .gitignore | 1 + CHANGELOG.rst | 851 -------------------------- README.rst | 2 +- doc/_templates/partials/webfonts.html | 0 doc/changelog.rst | 4 - doc/changes/changelog.md | 121 ++++ doc/changes/changes_0.7.0.md | 5 + doc/changes/changes_0.7.4.md | 6 + doc/changes/changes_0.7.5.md | 6 + doc/changes/changes_0.8.0.md | 15 + doc/changes/changes_0.8.1.md | 10 + doc/changes/changes_0.8.2.md | 6 + doc/changes/changes_0.8.3.md | 6 + doc/changes/changes_0.8.4.md | 6 + doc/changes/changes_0.8.5.md | 10 + doc/changes/changes_0.9.0.md | 16 + doc/changes/changes_0.9.1.md | 6 + doc/changes/changes_0.9.2.md | 6 + doc/changes/changes_0.9.3.md | 6 + doc/changes/changes_1.0.0.md | 10 + doc/changes/changes_1.0.1.md | 7 + doc/changes/changes_1.0.2.md | 14 + doc/changes/changes_1.0.3.md | 6 + doc/changes/changes_1.1.0.md | 10 + doc/changes/changes_1.1.1.md | 6 + doc/changes/changes_1.2.0.md | 12 + doc/changes/changes_1.2.1.md | 7 + doc/changes/changes_1.2.2.md | 6 + doc/changes/changes_1.2.3.md | 16 + doc/changes/changes_1.2.4.md | 6 + doc/changes/changes_1.2.5.md | 15 + doc/changes/changes_1.3.0.md | 15 + doc/changes/changes_1.3.1.md | 11 + doc/changes/changes_1.3.2.md | 11 + doc/changes/changes_2.0.0.md | 11 + doc/changes/changes_2.0.1.md | 15 + doc/changes/changes_2.0.10.md | 8 + doc/changes/changes_2.0.2.md | 5 + doc/changes/changes_2.0.3.md | 10 + doc/changes/changes_2.0.4.md | 10 + doc/changes/changes_2.0.5.md | 10 + doc/changes/changes_2.0.6.md | 21 + doc/changes/changes_2.0.7.md | 7 + doc/changes/changes_2.0.8.md | 8 + doc/changes/changes_2.0.9.md | 10 + doc/changes/changes_2.1.0.md | 8 + doc/changes/changes_2.2.0.md | 11 + doc/changes/changes_2.3.0.md | 23 + doc/changes/changes_2.4.0.md | 13 + doc/changes/changes_3.0.0.md | 13 + doc/changes/changes_3.1.1.md | 18 + doc/changes/changes_3.2.2.md | 21 + doc/changes/changes_4.0.0.md | 40 ++ doc/changes/changes_4.4.0.md | 39 ++ doc/changes/changes_4.5.0.md | 13 + doc/changes/changes_4.5.1.md | 6 + doc/changes/changes_4.6.0.md | 13 + doc/changes/changes_4.6.1.md | 7 + doc/changes/changes_4.6.2.md | 6 + doc/changes/changes_4.6.3.md | 13 + doc/changes/changes_5.0.0.md | 11 + doc/changes/unreleased.md | 18 + doc/conf.py | 49 +- doc/developer_guide/index.rst | 5 + doc/faq.rst | 6 + doc/index.rst | 47 +- doc/readme.rst | 5 - doc/user_guide.rst | 37 ++ noxconfig.py | 22 + noxfile.py | 49 +- poetry.lock | 373 ++++++++++- pyproject.toml | 6 +- scripts/links.py | 2 +- 77 files changed, 1288 insertions(+), 974 deletions(-) delete mode 100644 .github/workflows/link-check.yaml delete mode 100644 CHANGELOG.rst create mode 100644 doc/_templates/partials/webfonts.html delete mode 100644 doc/changelog.rst create mode 100644 doc/changes/changelog.md create mode 100644 doc/changes/changes_0.7.0.md create mode 100644 doc/changes/changes_0.7.4.md create mode 100644 doc/changes/changes_0.7.5.md create mode 100644 doc/changes/changes_0.8.0.md create mode 100644 doc/changes/changes_0.8.1.md create mode 100644 doc/changes/changes_0.8.2.md create mode 100644 doc/changes/changes_0.8.3.md create mode 100644 doc/changes/changes_0.8.4.md create mode 100644 doc/changes/changes_0.8.5.md create mode 100644 doc/changes/changes_0.9.0.md create mode 100644 doc/changes/changes_0.9.1.md create mode 100644 doc/changes/changes_0.9.2.md create mode 100644 doc/changes/changes_0.9.3.md create mode 100644 doc/changes/changes_1.0.0.md create mode 100644 doc/changes/changes_1.0.1.md create mode 100644 doc/changes/changes_1.0.2.md create mode 100644 doc/changes/changes_1.0.3.md create mode 100644 doc/changes/changes_1.1.0.md create mode 100644 doc/changes/changes_1.1.1.md create mode 100644 doc/changes/changes_1.2.0.md create mode 100644 doc/changes/changes_1.2.1.md create mode 100644 doc/changes/changes_1.2.2.md create mode 100644 doc/changes/changes_1.2.3.md create mode 100644 doc/changes/changes_1.2.4.md create mode 100644 doc/changes/changes_1.2.5.md create mode 100644 doc/changes/changes_1.3.0.md create mode 100644 doc/changes/changes_1.3.1.md create mode 100644 doc/changes/changes_1.3.2.md create mode 100644 doc/changes/changes_2.0.0.md create mode 100644 doc/changes/changes_2.0.1.md create mode 100644 doc/changes/changes_2.0.10.md create mode 100644 doc/changes/changes_2.0.2.md create mode 100644 doc/changes/changes_2.0.3.md create mode 100644 doc/changes/changes_2.0.4.md create mode 100644 doc/changes/changes_2.0.5.md create mode 100644 doc/changes/changes_2.0.6.md create mode 100644 doc/changes/changes_2.0.7.md create mode 100644 doc/changes/changes_2.0.8.md create mode 100644 doc/changes/changes_2.0.9.md create mode 100644 doc/changes/changes_2.1.0.md create mode 100644 doc/changes/changes_2.2.0.md create mode 100644 doc/changes/changes_2.3.0.md create mode 100644 doc/changes/changes_2.4.0.md create mode 100644 doc/changes/changes_3.0.0.md create mode 100644 doc/changes/changes_3.1.1.md create mode 100644 doc/changes/changes_3.2.2.md create mode 100644 doc/changes/changes_4.0.0.md create mode 100644 doc/changes/changes_4.4.0.md create mode 100644 doc/changes/changes_4.5.0.md create mode 100644 doc/changes/changes_4.5.1.md create mode 100644 doc/changes/changes_4.6.0.md create mode 100644 doc/changes/changes_4.6.1.md create mode 100644 doc/changes/changes_4.6.2.md create mode 100644 doc/changes/changes_4.6.3.md create mode 100644 doc/changes/changes_5.0.0.md create mode 100644 doc/changes/unreleased.md create mode 100644 doc/faq.rst delete mode 100644 doc/readme.rst create mode 100644 doc/user_guide.rst create mode 100644 noxconfig.py diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index f8d92215..4ffa3751 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -24,7 +24,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run python -m nox -s docs:build checks: runs-on: ubuntu-latest diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5e9412e1..1fab6afe 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,7 +23,7 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs + poetry run python -m nox -s docs:build checks: runs-on: ubuntu-latest diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml index 74ae5ebb..3dc7f5aa 100644 --- a/.github/workflows/gh-pages.yaml +++ b/.github/workflows/gh-pages.yaml @@ -21,14 +21,14 @@ jobs: - name: Build Documentation run: | - poetry run python -m nox -s build-docs - touch doc/build/.nojekyll + poetry run python -m nox -s docs:multiversion + touch .html-documentation/.nojekyll - name: Deploy uses: JamesIves/github-pages-deploy-action@v4.5.0 with: branch: gh-pages - folder: ./doc/build + folder: .html-documentation git-config-name: Github Action git-config-email: opensource@exasol.com diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml deleted file mode 100644 index 13b08f12..00000000 --- a/.github/workflows/link-check.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: Check Links - -on: - push: - pull_request: - -jobs: - run_tests: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python: [3.9] - - name: Check Links (Python-${{ matrix.python }}) - - steps: - - - name: Fetch sqlalchemy_exasol code from repository - uses: actions/checkout@v4 - - - name: Setup Python & Poetry Environment - uses: ./.github/actions/python-environment - with: - python-version: ${{ matrix.python }} - - - name: Check documentation links ${{ matrix.python }} using ${{ matrix.connector }} - run: poetry run nox -s check-links diff --git a/.gitignore b/.gitignore index 266eb950..71c57235 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.html-documentation odbcconfig/odbcinst.ini _build/ diff --git a/CHANGELOG.rst b/CHANGELOG.rst deleted file mode 100644 index f204ae0e..00000000 --- a/CHANGELOG.rst +++ /dev/null @@ -1,851 +0,0 @@ -.. _changelog-unreleased: - -Unreleased -========== - -🗑️ Removed ----------- -- Dropped python 3.8 support - * If you still depend on python 3.8 use the 5.x version line - -🧰 Internal ------------ -- Removed pyexasol dbapi2 api shim - (Now it is using the dbapi2 shim provided by the pyexasol project) -- Remove testing against Exasol 7.0 -- Relocked dependencies - -.. _changelog-5.0.0: - -5.0.0 — 2024-02-02 -================== - -🔧 Changed ------------ -- Made pyodbc an optional dependency -- Made websockets the default way to use sqlalchemy with exasol -- Added deprecation warnings for pyodbc and trubodbc dialects - -🧰 Internal ------------ -- Relocked dependencies - -.. _changelog-4.6.3: - -4.6.3 — 2023-12-21 -================== - -🔧 Changed ------------ -- Changed pyodbc upper bound constraint - (Allow larger upper bounds) - -🧰 Internal ------------ -- Relocked dependencies -- Bumped versions of GitHub actions -- Adjusted workflow triggers, to enable workflow runs for external branches - -.. _changelog-4.6.2: - -4.6.2 — 2023-11-22 -================== - -🔧 Changed ------------ - -- Loosened the SQLAlchemy dependency constraint to `>=1.4,<2` - -.. _changelog-4.6.1: - -4.6.1 — 2023-11-06 -================== - -🐞 Fixed ---------- - -- Fixed `WebSocket connection isn't properly closed in case of process termination `_ - - -.. _changelog-4.6.0: - -4.6.0 — 2023-07-18 -================== - -🚀 Feature ------------ - -- Websocket based dialect have been stabilized and is officially supported now - - 📘 Note: Inserting multiple empty row's, facilitating default settings currently isn't supported. - -🐞 Fixed ---------- - -- Fixed `prepared statements send the wrong types as parameters to the server `_ -- Fixed `Various SQLA compliance tests are failing for the websocket based dialect `_ - -.. _changelog-4.5.1: - -4.5.1 — 2023-05-25 -================== - -🐞 Fixed ---------- - -- Fixed missing websocket driver package in release deliverables - -.. _changelog-4.5.0: - -4.5.0 — 2023-05-24 -================== -* Added Beta version of websocket based dialect - - **🚨 Attention:** - - This feature is currently in Beta, therefore it should not be used in production. - We also recommend to have a look into the known issues, before you start using it. - - If you encounter any problem, please `create an issue `_. - With your feedback, we will be able stabilize this feature more quickly. - - -.. _changelog-4.4.0: - -4.4.0 — 2023-05-16 -================== - - **🚨 Attention:** - - The turbodbc dependency was pinned to *4.5.4* due to issues with newer versions. - - Failing tests in the SQLA compliance test suite, in regard to the turbodbc dialect - won't be addressed until explicitly required/requested by users. - - Note: It is also very likely that turbodbc support will be dropped in future versions. - -🐞 Fixed --------- - -* Fixed invalid implicit autocommit behaviour, for details see ``_ - -✨ Added --------- - -* Added websocket based dbapi2 compliant database driver - -🔧 Changed ----------- - -* Updated pytest -* Updated Dependencies -* Loosened version constraints on 'packaging' dependency -* Loosened dev dependency constraints - -🧰 Internal ------------ -* Changed changelog workflow - - - Removed scriv - - Added unreleased section to track unreleased changes - -* Simplified workflows by factoring out python & poetry setup into an action -* Added a internal category to the changelog fragment template -* Added manual trigger for the gh-pages workflow -* Removed workaround for outdated DB versions - (for further details see https://github.com/exasol/sqlalchemy-exasol/issues/5) -* Added exasol-integration-test-docker-environment as dev dependency - -.. _changelog-4.0.0: - -4.0.0 — 2022-12-01 -================== - -✨ Added --------- - -* Added support for SQLA 1.4 - - .. warning:: - This upgrade is not backwards compatible with SQLA < 1.4 - - .. warning:: - - This version may impact the performance (see also `SQLAlchemy docs `_). - If you are not willing or able to pay those potential performance hits, you should wait until the `tracking-issue #190 `_ - is resolved. - - -🗑️ Removed ----------- - -* Removed custom merge statement - - (If we will be notified, that someone depends on this feature, we are open to add it again.) - -🔐 Security ------------ - -- Evaluated CVE-2022-42969 - - CVE will be silenced - - The affected code is not used by our project itself, - nor by the dependencies pulling in the vulnerable library. - - Checked dependencies: - - * Nox (Code search) - * Pytest (Code search + `tracking-issue #10392 `_) - -🔧 Changed ----------- - -- Updated all dependencies - -🐞 Fixed ---------- - -- Fixed link to project documentation - - -.. _changelog-3.2.1: - -3.2.2 — 2022-08-12 -================== - -✨ Added --------- -- Added turbodbc support - * Re-enabled with new minimum base version 4.5.4 -- Added additional information to README - * License information (badge) - * Code formatter(s) in use (black, isort) - * Linting score of the project - -🔧 Changed ----------- -- Changed changelog format - * Changelog now can be found in the file CHANGELOG.rst -- Reworked and restructured project documentation - -🗑️ Removed ----------- -- Removed markdown based changelog - - -.. _changelog-3.1.1: - -3.1.1 — 2022-07-21 -================== - -✨ Added --------- -- Added new exasol odbc driver 7.1.11 -- Added additional badges for to improve project status overview - -🔧 Changed ----------- -- Updated databases for testing to 7.1.9 and 7.0.18 -- Updated pyodbc dependency from 4.0.32 to 4.0.34 - -🐞 Fixed --------- -- Fixed CI/CD build and publish target -- Fixed CI/CD to run tests against all configured databases - - -.. _changelog-3.0.0: - -3.0.0 — 2022-07-14 -================== - -🗑️ Removed ----------- -- The support of the turbodbc feature has been suspended, until the following issues have been addressed - * https://github.com/blue-yonder/turbodbc/issues/358 - * https://github.com/exasol/sqlalchemy-exasol/issues/146 - * Note: If you depend on turbodbc we suggest you to use the latest version supporting it (2.4.0) - -- Dropped python 3.7 support - * If you still depend on python 3.7 use the 2.x version line -- Dropped conda forge support - - -.. _changelog-2.4.0: - -2.4.0 — 2022-05-19 -================== - -🗑️ Removed ----------- -- Removed odbc specific functionality from base dialect and moved it to the pyodbc dialect -- Removed remaining python2 compatibility artifacts and switches -- Dropped support for python versions < 3.7 - -🐞 Fixed --------- -- Fixed bug when accessing underlying odbc connection while using NullPool based engine - Note: This addresses the superset `issue-20105 `_ - - -.. _changelog-2.3.0: - -2.3.0 — 2022-04-13 -================== - -🗑️ Removed ----------- -- Removed outdated documentation and resources -- Dropped python 2.7 support - -🔧 Changed ----------- -* Update supported versions of EXASOL DB to 7.1.6 and 7.0.16 -* Update supported python versions to 3.6, 3.7, 3.8, 3.9 -* Bumped SQLAlchemy dependency to 1.3.24 -* Bumped pyodbc dependency to 4.0.32 -* Updated documentation to reflect the latest version changes etc. -* Updated maintainer and contact information - -🐞 Fixed --------- -* Fixed bug regarding maximum identifier length -* Fixed bug with custom translate maps -* Fixed bug regarding non existent error code mappings for EXASOL specific odbc error codes - - -.. _changelog-2.2.0: - -2.2.0 — 2020-09-02 -================== - -🔧 Changed ----------- -- Updated dependencies - -🐞 Fixed --------- -- Fixed performance problems for large tables/databases. For more details see `PR `_ - - -.. _changelog-2.1.0: - -2.1.0 — 2020-05-28 -================== - -🔧 Changed ----------- -- Updated documentation (README.rst and INTEGRATION_TEST.md) -- Updated dependencies -- Replaced metadata queries with ODBC metadata to avoid deadlocks - - -.. _changelog-2.0.10: - -2.0.10 — 2020-05-08 -=================== - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.3.16 -- Updated six dependency to 1.14.0 -- Updated pyodbc dependency to 4.0.30 - - -.. _changelog-2.0.9: - -2.0.9 — 2019-10-18 -=================== - -✨ Added --------- -- Add support for computed columns to merge (contribution by @vamega) - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.3.10 - - -.. _changelog-2.0.8: - -2.0.8 — 2019-10-07 -=================== - -✨ Added --------- -- Added new EXASOL keywords (contribution from @vamega) -- Added MERGE statement to auto commit heuristic (contribution from @vamega) - - -.. _changelog-2.0.7: - -2.0.7 — 2019-10-01 -=================== - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.3.8 - - -.. _changelog-2.0.6: - -2.0.6 — 2019-08-12 -=================== - -🗑️ Removed ----------- -- Removed deprecated setting of 'convert_unicode' on engine - -✨ Added --------- -- Added support for empty set expressions required by new SQLA tests - -🔧 Changed ----------- -- Updated PyODBC dependency to 4.0.27 -- Updated SQLAlchemy dependency to 1.3.6 - -🐞 Fixed --------- -- Fixed bug in reflection of CHAR colums (missing length). Contribution from @vamega -- Fixed bug in rendering of SQL statements with common table expressions (CTE). Contribution from @vamega - - -.. _changelog-2.0.5: - -2.0.5 — 2019-05-03 -=================== - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.2.18 - -🐞 Fixed --------- -- Fixed bug in server version string parsing (turbodbc) - - -.. _changelog-2.0.4: - -2.0.4 — 2018-10-16 -=================== - -🔧 Changed ----------- -- Updated pyodbc dependency to 4.0.24 - -🐞 Fixed --------- -- Fix string parameters in delete when using Python 3 - - -.. _changelog-2.0.3: - -2.0.3 — 2018-08-02 -=================== - -🔧 Changed ----------- -- Update SQLAlchemy dependency to 1.2.10 - -🐞 Fixed --------- -- Pass the autocommit parameter when specified also to turodbc. - - -.. _changelog-2.0.1: - -2.0.1 — 2018-06-28 -=================== - -🗑️ Removed ----------- -- Dropped EXASOL 5 support - -✨ Added --------- -- Added support for the turbodbc parameters `varchar_max_character_limit`, `prefer_unicode`, - `large_decimals_as_64_bit_types`, and `limit_varchar_results_to_max`. - -🔧 Changed ----------- -- Update SQLAlchemy dependency to 1.2.8 - - -.. _changelog-2.0.0: - -2.0.0 — 2018-01-09 -=================== - -🔧 Changed ----------- -- BREAKING CHANGE: default driver name removed from dialect. The driver must now be explicitly - specified. Either in the DSN or in the connection string using the - optional 'driver' parameter (e.g. appending &driver=EXAODBC to connection URL) -- Updated SQLAlchemy dependency to 1.2.0 -- Updated pyodbc dependency to 4.0.21 - - -.. _changelog-1.3.2: - -1.3.2 — 2017-10-15 -=================== - -🗑️ Removed ----------- -- Dropped support for Python3 version < Python 3.6 - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.1.14 - - -.. _changelog-1.3.1: - -1.3.1 — 2017-08-16 -=================== - -✨ Added --------- -- Added `raw_sql` to util.py for debugging - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.1.13 - - -.. _changelog-1.3.0: - -1.3.0 — 2017-08-02 -=================== - -✨ Added --------- -- Added EXASOL 6 driver (6.0.2) - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.1.12 - -🐞 Fixed --------- -- Fixed issue #53 - TRUNCATE statements now autocommited (if autocommit = True) - - -.. _changelog-1.2.5: - -1.2.5 — 2017-08-02 -=================== - -🗑️ Removed ----------- -- Removed support for EXASOL 4 driver - -✨ Added --------- -- Added support for EXASOL 6 - -🔧 Changed ----------- -- Updated pyodbc dependency to 4.0.17 -- Adjusted list of reserved keywords in respect to EXASOL 6 - - -.. _changelog-1.2.4: - -1.2.4 — 2017-06-26 -=================== - -🐞 Fixed --------- -- Fixed bug introduced by typo in base.py:454 - - -.. _changelog-1.2.3: - -1.2.3 — 2017-06-20 -=================== - -✨ Added --------- -- Added missing kw arg in limit_clause (contribution from sroecker) - -🔧 Changed ----------- -- Updated SQLAlchemy dependency to 1.1.11 -- Changed EXAExecutionContext.executemany to default 'False' - -🐞 Fixed --------- -- Fixed bug with incorrect handling of case insensitive names (lower case in SQLA, upper case in EXASOL) -- Fixed bug in lookup of default schema name to include schema provided in connection url - - -.. _changelog-1.2.2: - -1.2.2 — 2017-05-29 -=================== - -🐞 Fixed --------- -- Fixed failing upload of build results to pypi - - -.. _changelog-1.2.1: - -1.2.1 — 2017-05-25 -=================== - -🐞 Fixed --------- -- Fixed ODBC Driver name that is to be used -- Use unicode on osx for turbodbc fixes #63 - - -.. _changelog-1.2.0: - -1.2.0 — 2017-04-04 -=================== - -✨ Added --------- -- Added Support for Python 3.6 - -🔧 Changed ----------- -- Turbodbc support uses buffer size based on memory budget - instead of a fixed number of rows. -- Turbodbc support requires turbodbc>=0.4.1 - - -.. _changelog-1.1.1: - -1.1.1 — 2016-10-14 -=================== - -🔧 Changed ----------- -- Upgrade sqlalchemy test dependency to 1.1.1 - - -.. _changelog-1.1.0: - -1.1.0 — 2016-07-15 -=================== - -🗑️ Removed ----------- -- Dropped EXASOL 4 support - -✨ Added --------- -- Add support for the `turbodbc `_ driver - - -.. _changelog-1.0.3: - -1.0.3 — 2016-04-14 -=================== - -🔧 Changed ----------- -- Reconnect after socket closed - - -.. _changelog-1.0.2: - -1.0.2 — 2016-03-12 -=================== - -✨ Added --------- -- Added supports_native_decimal Flag - -🔧 Changed ----------- -- Improved DSN handling - -🐞 Fixed --------- -- Fixed Unicode Problems for OSX/Darwin - - -.. _changelog-1.0.1: - -1.0.1 — 2015-03-21 -=================== - -✨ Added --------- -- Added OFFSET Support for Exasol 5.X -- Added Tests for Python 3.5 - - -.. _changelog-1.0.0: - -1.0.0 — 2015-05-15 -=================== - -🗑️ Removed ----------- -- Dropped support for sqlalchemy versions < 1.0.x - -🔧 Changed ----------- -- Update sqlalchemy dependency to 1.0.x - - -.. _changelog-0.9.3: - -0.9.3 — 2015-05-13 -=================== - -🔧 Changed ----------- -- Changed execute behaviour for deletes as fixed in 0.9.2 for updates (#36) - - -.. _changelog-0.9.2: - -0.9.2 — 2015-05-06 -=================== - -🐞 Fixed ----------- -- Changed execute behaviour for updates fixes #36 - - -.. _changelog-0.9.1: - -0.9.1 — 2015-01-29 -=================== - -✨ Added --------- -- Added support for DISTRIBUTE BY table constraints - - -.. _changelog-0.9.0: - -0.9.0 — 2015-01-26 -=================== - -✨ Added --------- -- Added support for EXASolution 5.x -- Added documentation on how to setup the integration test against the EXASOL hosted test db - -🔧 Changed ----------- -- Mark connection in pool as closed to prevent reuse -- Use bulk reflection per schema and improved caching for inspection - -🐞 Fixed ----------- -- Fixed conversion to uppercase in connection parameters - - -.. _changelog-0.8.5: - -0.8.5 — 2014-07-31 -=================== - -✨ Added --------- -- Added Python 3.4 test - -🔧 Changed ----------- -- Set default schema to 'SYS' to create reasonable reflections - - -.. _changelog-0.8.4: - -0.8.4 — 2014-07-30 -=================== - -🔧 Changed ----------- -- Downgrade six dependency selector to >=1.5 - - -.. _changelog-0.8.3: - -0.8.3 — 2014-07-18 -=================== - -🐞 Fixed --------- -- Fixed versioneer build parameter in setup.py to enable pip install - - -.. _changelog-0.8.2: - -0.8.2 — 2014-07-17 -=================== - -✨ Added --------- -- Added README - - -.. _changelog-0.8.1: - -0.8.1 — 2014-06-26 -=================== - -✨ Added --------- -- Added p3k support - contribution by iadrich - -🔧 Changed ----------- -- Updated repository url - - -.. _changelog-0.8.0: - -0.8.0 — 2014-06-26 -=================== - -✨ Added --------- -- Added support for SQL MERGE - -🔧 Changed ----------- -- Updated SQLA dependency selector to 0.9.x (build requires >= 0.9.6) - -🐞 Fixed --------- -- Fixed incorrect quoting of identifiers with leading _ -- Fixed incorrect implementation for retrieving last generated PK (for auto inc columns) - - -.. _changelog-0.7.5: - -0.7.5 — 2014-05-08 -=================== - -🔧 Changed ----------- -- Switched to versioneer - - -.. _changelog-0.7.4: - -0.7.4 — 2014-04-01 -=================== - -🔧 Changed ----------- -- changed README from md to rst to display reasonable content on pypi - - -.. _changelog-0.7.0: - -0.7.0 — 2014-03-28 -=================== - -✨ Added --------- -- Added first version of the SQLAlchemy EXASOL dialect (released under BSD license) diff --git a/README.rst b/README.rst index 6627b989..64a40e98 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ SQLAlchemy Dialect for EXASOL DB -================================ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. image:: https://github.com/exasol/sqlalchemy-exasol/actions/workflows/ci-cd.yml/badge.svg?branch=master&event=push diff --git a/doc/_templates/partials/webfonts.html b/doc/_templates/partials/webfonts.html new file mode 100644 index 00000000..e69de29b diff --git a/doc/changelog.rst b/doc/changelog.rst deleted file mode 100644 index e086a954..00000000 --- a/doc/changelog.rst +++ /dev/null @@ -1,4 +0,0 @@ -Changelog -_________ - -.. include:: ../CHANGELOG.rst diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md new file mode 100644 index 00000000..3530153a --- /dev/null +++ b/doc/changes/changelog.md @@ -0,0 +1,121 @@ +# Changes + +* [unreleased](unreleased.md) +* [5.0.0](changes_5.0.0.md) +* [4.6.3](changes_4.6.3.md) +* [4.6.2](changes_4.6.2.md) +* [4.6.1](changes_4.6.1.md) +* [4.6.0](changes_4.6.0.md) +* [4.5.1](changes_4.5.1.md) +* [4.5.0](changes_4.5.0.md) +* [4.4.0](changes_4.4.0.md) +* [4.0.0](changes_4.0.0.md) +* [3.2.2](changes_3.2.2.md) +* [3.1.1](changes_3.1.1.md) +* [3.0.0](changes_3.0.0.md) +* [2.4.0](changes_2.4.0.md) +* [2.3.0](changes_2.3.0.md) +* [2.2.0](changes_2.2.0.md) +* [2.1.0](changes_2.1.0.md) +* [2.0.10](changes_2.0.1.md) +* [2.0.9](changes_2.0.9.md) +* [2.0.8](changes_2.0.8.md) +* [2.0.7](changes_2.0.7.md) +* [2.0.6](changes_2.0.6.md) +* [2.0.5](changes_2.0.5.md) +* [2.0.4](changes_2.0.4.md) +* [2.0.3](changes_2.0.3.md) +* [2.0.2](changes_2.0.2.md) +* [2.0.1](changes_2.0.1.md) +* [2.0.0](changes_2.0.0.md) +* [1.3.2](changes_1.3.2.md) +* [1.3.1](changes_1.3.1.md) +* [1.3.0](changes_1.3.0.md) +* [1.2.5](changes_1.2.5.md) +* [1.2.4](changes_1.2.4.md) +* [1.2.3](changes_1.2.3.md) +* [1.2.2](changes_1.2.2.md) +* [1.2.1](changes_1.2.1.md) +* [1.2.0](changes_1.2.0.md) +* [1.1.1](changes_1.1.1.md) +* [1.1.0](changes_1.1.0.md) +* [1.0.3](changes_1.0.3.md) +* [1.0.2](changes_1.0.2.md) +* [1.0.1](changes_1.0.1.md) +* [1.0.0](changes_1.0.0.md) +* [0.9.3](changes_0.9.3.md) +* [0.9.2](changes_0.9.2.md) +* [0.9.1](changes_0.9.1.md) +* [0.9.0](changes_0.9.0.md) +* [0.8.5](changes_0.8.5.md) +* [0.8.4](changes_0.8.4.md) +* [0.8.3](changes_0.8.3.md) +* [0.8.2](changes_0.8.2.md) +* [0.8.1](changes_0.8.1.md) +* [0.8.0](changes_0.8.0.md) +* [0.7.5](changes_0.7.5.md) +* [0.7.4](changes_0.7.4.md) +* [0.7.0](changes_0.7.0.md) + +```{toctree} +--- +hidden: +--- +unreleased +changes_5.0.0 +changes_4.6.3 +changes_4.6.2 +changes_4.6.1 +changes_4.6.0 +changes_4.5.1 +changes_4.5.0 +changes_4.4.0 +changes_4.0.0 +changes_3.2.2 +changes_3.1.1 +changes_3.0.0 +changes_2.4.0 +changes_2.3.0 +changes_2.2.0 +changes_2.1.0 +changes_2.0.10 +changes_2.0.9 +changes_2.0.8 +changes_2.0.7 +changes_2.0.6 +changes_2.0.5 +changes_2.0.4 +changes_2.0.3 +changes_2.0.2 +changes_2.0.1 +changes_2.0.0 +changes_1.3.2 +changes_1.3.1 +changes_1.3.0 +changes_1.2.5 +changes_1.2.4 +changes_1.2.3 +changes_1.2.2 +changes_1.2.1 +changes_1.2.0 +changes_1.1.1 +changes_1.1.0 +changes_1.0.3 +changes_1.0.2 +changes_1.0.1 +changes_1.0.0 +changes_0.9.3 +changes_0.9.2 +changes_0.9.1 +changes_0.9.0 +changes_0.8.5 +changes_0.8.4 +changes_0.8.3 +changes_0.8.2 +changes_0.8.1 +changes_0.8.0 +changes_0.7.5 +changes_0.7.4 +changes_0.7.0 +``` + diff --git a/doc/changes/changes_0.7.0.md b/doc/changes/changes_0.7.0.md new file mode 100644 index 00000000..75e6a165 --- /dev/null +++ b/doc/changes/changes_0.7.0.md @@ -0,0 +1,5 @@ +# 0.7.0 — 2014-03-28 + +## ✨ Added + +- Added first version of the SQLAlchemy EXASOL dialect (released under BSD license) diff --git a/doc/changes/changes_0.7.4.md b/doc/changes/changes_0.7.4.md new file mode 100644 index 00000000..ede36c95 --- /dev/null +++ b/doc/changes/changes_0.7.4.md @@ -0,0 +1,6 @@ +# 0.7.4 — 2014-04-01 + +## 🔧 Changed + +- changed README from md to rst to display reasonable content on pypi + diff --git a/doc/changes/changes_0.7.5.md b/doc/changes/changes_0.7.5.md new file mode 100644 index 00000000..6e939197 --- /dev/null +++ b/doc/changes/changes_0.7.5.md @@ -0,0 +1,6 @@ +# 0.7.5 — 2014-05-08 + +## 🔧 Changed + +- Switched to versioneer + diff --git a/doc/changes/changes_0.8.0.md b/doc/changes/changes_0.8.0.md new file mode 100644 index 00000000..ccd59343 --- /dev/null +++ b/doc/changes/changes_0.8.0.md @@ -0,0 +1,15 @@ +# 0.8.0 — 2014-06-26 + +## ✨ Added + +- Added support for SQL MERGE + +## 🔧 Changed + +- Updated SQLA dependency selector to 0.9.x (build requires >= 0.9.6) + +## 🐞 Fixed + +- Fixed incorrect quoting of identifiers with leading _ +- Fixed incorrect implementation for retrieving last generated PK (for auto inc columns) + diff --git a/doc/changes/changes_0.8.1.md b/doc/changes/changes_0.8.1.md new file mode 100644 index 00000000..646c3651 --- /dev/null +++ b/doc/changes/changes_0.8.1.md @@ -0,0 +1,10 @@ +# 0.8.1 — 2014-06-26 + +## ✨ Added + +- Added p3k support - contribution by iadrich + +## 🔧 Changed + +- Updated repository url + diff --git a/doc/changes/changes_0.8.2.md b/doc/changes/changes_0.8.2.md new file mode 100644 index 00000000..a2720e3d --- /dev/null +++ b/doc/changes/changes_0.8.2.md @@ -0,0 +1,6 @@ +# 0.8.2 — 2014-07-17 + +## ✨ Added + +- Added README + diff --git a/doc/changes/changes_0.8.3.md b/doc/changes/changes_0.8.3.md new file mode 100644 index 00000000..df5951da --- /dev/null +++ b/doc/changes/changes_0.8.3.md @@ -0,0 +1,6 @@ +# 0.8.3 — 2014-07-18 + +## 🐞 Fixed + +- Fixed versioneer build parameter in setup.py to enable pip install + diff --git a/doc/changes/changes_0.8.4.md b/doc/changes/changes_0.8.4.md new file mode 100644 index 00000000..4d6d2341 --- /dev/null +++ b/doc/changes/changes_0.8.4.md @@ -0,0 +1,6 @@ +# 0.8.4 — 2014-07-30 + +## 🔧 Changed + +- Downgrade six dependency selector to >=1.5 + diff --git a/doc/changes/changes_0.8.5.md b/doc/changes/changes_0.8.5.md new file mode 100644 index 00000000..2a54531e --- /dev/null +++ b/doc/changes/changes_0.8.5.md @@ -0,0 +1,10 @@ +# 0.8.5 — 2014-07-31 + +## ✨ Added + +- Added Python 3.4 test + +## 🔧 Changed + +- Set default schema to 'SYS' to create reasonable reflections + diff --git a/doc/changes/changes_0.9.0.md b/doc/changes/changes_0.9.0.md new file mode 100644 index 00000000..1bd598dd --- /dev/null +++ b/doc/changes/changes_0.9.0.md @@ -0,0 +1,16 @@ +# 0.9.0 — 2015-01-26 + +## ✨ Added + +- Added support for EXASolution 5.x +- Added documentation on how to setup the integration test against the EXASOL hosted test db + +## 🔧 Changed + +- Mark connection in pool as closed to prevent reuse +- Use bulk reflection per schema and improved caching for inspection + +## 🐞 Fixed + +- Fixed conversion to uppercase in connection parameters + diff --git a/doc/changes/changes_0.9.1.md b/doc/changes/changes_0.9.1.md new file mode 100644 index 00000000..58ca988c --- /dev/null +++ b/doc/changes/changes_0.9.1.md @@ -0,0 +1,6 @@ +# 0.9.1 — 2015-01-29 + +## ✨ Added + +- Added support for DISTRIBUTE BY table constraints + diff --git a/doc/changes/changes_0.9.2.md b/doc/changes/changes_0.9.2.md new file mode 100644 index 00000000..deb08c67 --- /dev/null +++ b/doc/changes/changes_0.9.2.md @@ -0,0 +1,6 @@ +# 0.9.2 — 2015-05-06 + +## 🐞 Fixed + +- Changed execute behaviour for updates fixes #36 + diff --git a/doc/changes/changes_0.9.3.md b/doc/changes/changes_0.9.3.md new file mode 100644 index 00000000..d2607748 --- /dev/null +++ b/doc/changes/changes_0.9.3.md @@ -0,0 +1,6 @@ +# 0.9.3 — 2015-05-13 + +## 🔧 Changed + +- Changed execute behaviour for deletes as fixed in 0.9.2 for updates (#36) + diff --git a/doc/changes/changes_1.0.0.md b/doc/changes/changes_1.0.0.md new file mode 100644 index 00000000..b3bb3b0b --- /dev/null +++ b/doc/changes/changes_1.0.0.md @@ -0,0 +1,10 @@ +# 1.0.0 — 2015-05-15 + +## 🗑️ Removed + +- Dropped support for sqlalchemy versions < 1.0.x + +## 🔧 Changed + +- Update sqlalchemy dependency to 1.0.x + diff --git a/doc/changes/changes_1.0.1.md b/doc/changes/changes_1.0.1.md new file mode 100644 index 00000000..49d3a32e --- /dev/null +++ b/doc/changes/changes_1.0.1.md @@ -0,0 +1,7 @@ +# 1.0.1 — 2015-03-21 + +## ✨ Added + +- Added OFFSET Support for Exasol 5.X +- Added Tests for Python 3.5 + diff --git a/doc/changes/changes_1.0.2.md b/doc/changes/changes_1.0.2.md new file mode 100644 index 00000000..10e0fb5c --- /dev/null +++ b/doc/changes/changes_1.0.2.md @@ -0,0 +1,14 @@ +# 1.0.2 — 2016-03-12 + +## ✨ Added + +- Added supports_native_decimal Flag + +## 🔧 Changed + +- Improved DSN handling + +## 🐞 Fixed + +- Fixed Unicode Problems for OSX/Darwin + diff --git a/doc/changes/changes_1.0.3.md b/doc/changes/changes_1.0.3.md new file mode 100644 index 00000000..3d87f689 --- /dev/null +++ b/doc/changes/changes_1.0.3.md @@ -0,0 +1,6 @@ +# 1.0.3 — 2016-04-14 + +## 🔧 Changed + +- Reconnect after socket closed + diff --git a/doc/changes/changes_1.1.0.md b/doc/changes/changes_1.1.0.md new file mode 100644 index 00000000..d3b3520e --- /dev/null +++ b/doc/changes/changes_1.1.0.md @@ -0,0 +1,10 @@ +# 1.1.0 — 2016-07-15 + +## 🗑️ Removed + +- Dropped EXASOL 4 support + +## ✨ Added + +- Add support for the [turbodbc](https://github.com/blue-yonder/turbodbc) driver + diff --git a/doc/changes/changes_1.1.1.md b/doc/changes/changes_1.1.1.md new file mode 100644 index 00000000..07bfa8ca --- /dev/null +++ b/doc/changes/changes_1.1.1.md @@ -0,0 +1,6 @@ +# 1.1.1 — 2016-10-14 + +## 🔧 Changed + +- Upgrade sqlalchemy test dependency to 1.1.1 + diff --git a/doc/changes/changes_1.2.0.md b/doc/changes/changes_1.2.0.md new file mode 100644 index 00000000..ffdb3140 --- /dev/null +++ b/doc/changes/changes_1.2.0.md @@ -0,0 +1,12 @@ +# 1.2.0 — 2017-04-04 + +## ✨ Added + +- Added Support for Python 3.6 + +## 🔧 Changed + +- Turbodbc support uses buffer size based on memory budget + instead of a fixed number of rows. +- Turbodbc support requires turbodbc>=0.4.1 + diff --git a/doc/changes/changes_1.2.1.md b/doc/changes/changes_1.2.1.md new file mode 100644 index 00000000..73045904 --- /dev/null +++ b/doc/changes/changes_1.2.1.md @@ -0,0 +1,7 @@ +# 1.2.1 — 2017-05-25 + +## 🐞 Fixed + +- Fixed ODBC Driver name that is to be used +- Use unicode on osx for turbodbc fixes #63 + diff --git a/doc/changes/changes_1.2.2.md b/doc/changes/changes_1.2.2.md new file mode 100644 index 00000000..92fad853 --- /dev/null +++ b/doc/changes/changes_1.2.2.md @@ -0,0 +1,6 @@ +# 1.2.2 — 2017-05-29 + +## 🐞 Fixed + +- Fixed failing upload of build results to pypi + diff --git a/doc/changes/changes_1.2.3.md b/doc/changes/changes_1.2.3.md new file mode 100644 index 00000000..02413183 --- /dev/null +++ b/doc/changes/changes_1.2.3.md @@ -0,0 +1,16 @@ +# 1.2.3 — 2017-06-20 + +## ✨ Added + +- Added missing kw arg in limit_clause (contribution from sroecker) + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.1.11 +- Changed EXAExecutionContext.executemany to default `False` + +## 🐞 Fixed + +- Fixed bug with incorrect handling of case insensitive names (lower case in SQLA, upper case in EXASOL) +- Fixed bug in lookup of default schema name to include schema provided in connection url + diff --git a/doc/changes/changes_1.2.4.md b/doc/changes/changes_1.2.4.md new file mode 100644 index 00000000..33e758fd --- /dev/null +++ b/doc/changes/changes_1.2.4.md @@ -0,0 +1,6 @@ +# 1.2.4 — 2017-06-26 + +## 🐞 Fixed + +- Fixed bug introduced by typo in base.py:454 + diff --git a/doc/changes/changes_1.2.5.md b/doc/changes/changes_1.2.5.md new file mode 100644 index 00000000..779fb391 --- /dev/null +++ b/doc/changes/changes_1.2.5.md @@ -0,0 +1,15 @@ +# 1.2.5 — 2017-08-02 + +## 🗑️ Removed + +- Removed support for EXASOL 4 driver + +## ✨ Added + +- Added support for EXASOL 6 + +## 🔧 Changed + +- Updated pyodbc dependency to 4.0.17 +- Adjusted list of reserved keywords in respect to EXASOL 6 + diff --git a/doc/changes/changes_1.3.0.md b/doc/changes/changes_1.3.0.md new file mode 100644 index 00000000..f8ee6389 --- /dev/null +++ b/doc/changes/changes_1.3.0.md @@ -0,0 +1,15 @@ +# 1.3.0 — 2017-08-02 + +## ✨ Added + +- Added EXASOL 6 driver (6.0.2) + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.1.12 + +## 🐞 Fixed + +- Fixed issue #53 - TRUNCATE statements now autocommited (if autocommit = True) + + diff --git a/doc/changes/changes_1.3.1.md b/doc/changes/changes_1.3.1.md new file mode 100644 index 00000000..71a5be74 --- /dev/null +++ b/doc/changes/changes_1.3.1.md @@ -0,0 +1,11 @@ +# 1.3.1 — 2017-08-16 + +## ✨ Added + +- Added `raw_sql` to util.py for debugging + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.1.13 + + diff --git a/doc/changes/changes_1.3.2.md b/doc/changes/changes_1.3.2.md new file mode 100644 index 00000000..94b8053f --- /dev/null +++ b/doc/changes/changes_1.3.2.md @@ -0,0 +1,11 @@ +# 1.3.2 — 2017-10-15 + +## 🗑️ Removed + +- Dropped support for Python3 version < Python 3.6 + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.1.14 + + diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md new file mode 100644 index 00000000..0a81a6f3 --- /dev/null +++ b/doc/changes/changes_2.0.0.md @@ -0,0 +1,11 @@ +# 2.0.0 — 2018-01-09 + +## 🔧 Changed + +- BREAKING CHANGE: default driver name removed from dialect. The driver must now be explicitly + specified. Either in the DSN or in the connection string using the + optional 'driver' parameter (e.g. appending &driver=EXAODBC to connection URL) +- Updated SQLAlchemy dependency to 1.2.0 +- Updated pyodbc dependency to 4.0.21 + + diff --git a/doc/changes/changes_2.0.1.md b/doc/changes/changes_2.0.1.md new file mode 100644 index 00000000..55252469 --- /dev/null +++ b/doc/changes/changes_2.0.1.md @@ -0,0 +1,15 @@ +# 2.0.1 — 2018-06-28 + +## 🗑️ Removed + +- Dropped EXASOL 5 support + +## ✨ Added + +- Added support for the turbodbc parameters `varchar_max_character_limit`, `prefer_unicode`, + `large_decimals_as_64_bit_types`, and `limit_varchar_results_to_max`. + +## 🔧 Changed + +- Update SQLAlchemy dependency to 1.2.8 + diff --git a/doc/changes/changes_2.0.10.md b/doc/changes/changes_2.0.10.md new file mode 100644 index 00000000..59e54a4e --- /dev/null +++ b/doc/changes/changes_2.0.10.md @@ -0,0 +1,8 @@ +# 2.0.10 — 2020-05-08 + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.3.16 +- Updated six dependency to 1.14.0 +- Updated pyodbc dependency to 4.0.30 + diff --git a/doc/changes/changes_2.0.2.md b/doc/changes/changes_2.0.2.md new file mode 100644 index 00000000..bc78bab4 --- /dev/null +++ b/doc/changes/changes_2.0.2.md @@ -0,0 +1,5 @@ +# 2.0.2 — ????-??-?? + +## 🔧 Changed + +- Pass the autocommit parameter when specified also to turodbc. diff --git a/doc/changes/changes_2.0.3.md b/doc/changes/changes_2.0.3.md new file mode 100644 index 00000000..40c82298 --- /dev/null +++ b/doc/changes/changes_2.0.3.md @@ -0,0 +1,10 @@ +# 2.0.3 — 2018-08-02 + +## 🔧 Changed + +- Update SQLAlchemy dependency to 1.2.10 + +## 🐞 Fixed + +- Pass the autocommit parameter when specified also to turodbc. + diff --git a/doc/changes/changes_2.0.4.md b/doc/changes/changes_2.0.4.md new file mode 100644 index 00000000..f557d304 --- /dev/null +++ b/doc/changes/changes_2.0.4.md @@ -0,0 +1,10 @@ +# 2.0.4 — 2018-10-16 + +## 🔧 Changed + +- Updated pyodbc dependency to 4.0.24 + +## 🐞 Fixed + +- Fix string parameters in delete when using Python 3 + diff --git a/doc/changes/changes_2.0.5.md b/doc/changes/changes_2.0.5.md new file mode 100644 index 00000000..04106591 --- /dev/null +++ b/doc/changes/changes_2.0.5.md @@ -0,0 +1,10 @@ +# 2.0.5 — 2019-05-03 + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.2.18 + +## 🐞 Fixed + +- Fixed bug in server version string parsing (turbodbc) + diff --git a/doc/changes/changes_2.0.6.md b/doc/changes/changes_2.0.6.md new file mode 100644 index 00000000..f77f10f0 --- /dev/null +++ b/doc/changes/changes_2.0.6.md @@ -0,0 +1,21 @@ +# 2.0.6 — 2019-08-12 + +## 🗑️ Removed + +- Removed deprecated setting of 'convert_unicode' on engine + +## ✨ Added + +- Added support for empty set expressions required by new SQLA tests + +## 🔧 Changed + +- Updated PyODBC dependency to 4.0.27 +- Updated SQLAlchemy dependency to 1.3.6 + +## 🐞 Fixed + +- Fixed bug in reflection of CHAR colums (missing length). Contribution from @vamega +- Fixed bug in rendering of SQL statements with common table expressions (CTE). Contribution from @vamega + + diff --git a/doc/changes/changes_2.0.7.md b/doc/changes/changes_2.0.7.md new file mode 100644 index 00000000..8d7882e3 --- /dev/null +++ b/doc/changes/changes_2.0.7.md @@ -0,0 +1,7 @@ +# 2.0.7 — 2019-10-01 + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.3.8 + + diff --git a/doc/changes/changes_2.0.8.md b/doc/changes/changes_2.0.8.md new file mode 100644 index 00000000..edd4ba8a --- /dev/null +++ b/doc/changes/changes_2.0.8.md @@ -0,0 +1,8 @@ +# 2.0.8 — 2019-10-07 + +## ✨ Added + +- Added new EXASOL keywords (contribution from @vamega) +- Added MERGE statement to auto commit heuristic (contribution from @vamega) + + diff --git a/doc/changes/changes_2.0.9.md b/doc/changes/changes_2.0.9.md new file mode 100644 index 00000000..ff378c8d --- /dev/null +++ b/doc/changes/changes_2.0.9.md @@ -0,0 +1,10 @@ +# 2.0.9 — 2019-10-18 + +## ✨ Added + +- Add support for computed columns to merge (contribution by @vamega) + +## 🔧 Changed + +- Updated SQLAlchemy dependency to 1.3.10 + diff --git a/doc/changes/changes_2.1.0.md b/doc/changes/changes_2.1.0.md new file mode 100644 index 00000000..13c41825 --- /dev/null +++ b/doc/changes/changes_2.1.0.md @@ -0,0 +1,8 @@ +# 2.1.0 — 2020-05-28 + +## 🔧 Changed + +- Updated documentation (README.rst and INTEGRATION_TEST.md) +- Updated dependencies +- Replaced metadata queries with ODBC metadata to avoid deadlocks + diff --git a/doc/changes/changes_2.2.0.md b/doc/changes/changes_2.2.0.md new file mode 100644 index 00000000..8dbe96eb --- /dev/null +++ b/doc/changes/changes_2.2.0.md @@ -0,0 +1,11 @@ +# 2.2.0 — 2020-09-02 + +## 🔧 Changed + +- Updated dependencies + +## 🐞 Fixed + +- Fixed performance problems for large tables/databases. For more details see [PR](https://github.com/blue-yonder/sqlalchemy_exasol/pull/101) + + diff --git a/doc/changes/changes_2.3.0.md b/doc/changes/changes_2.3.0.md new file mode 100644 index 00000000..e0e09c12 --- /dev/null +++ b/doc/changes/changes_2.3.0.md @@ -0,0 +1,23 @@ +# 2.3.0 — 2022-04-13 + +## 🗑️ Removed + +* Removed outdated documentation and resources +* Dropped python 2.7 support + +## 🔧 Changed + +* Update supported versions of EXASOL DB to 7.1.6 and 7.0.16 +* Update supported python versions to 3.6, 3.7, 3.8, 3.9 +* Bumped SQLAlchemy dependency to 1.3.24 +* Bumped pyodbc dependency to 4.0.32 +* Updated documentation to reflect the latest version changes etc. +* Updated maintainer and contact information + +## 🐞 Fixed + +* Fixed bug regarding maximum identifier length +* Fixed bug with custom translate maps +* Fixed bug regarding non existent error code mappings for EXASOL specific odbc error codes + + diff --git a/doc/changes/changes_2.4.0.md b/doc/changes/changes_2.4.0.md new file mode 100644 index 00000000..517662a8 --- /dev/null +++ b/doc/changes/changes_2.4.0.md @@ -0,0 +1,13 @@ +# 2.4.0 — 2022-05-19 + +## 🗑️ Removed + +- Removed odbc specific functionality from base dialect and moved it to the pyodbc dialect +- Removed remaining python2 compatibility artifacts and switches +- Dropped support for python versions `< 3.7` + +## 🐞 Fixed + +- Fixed bug when accessing underlying odbc connection while using NullPool based engine + Note: This addresses the superset [issue-20105](https://github.com/apache/superset/issues/20105) + diff --git a/doc/changes/changes_3.0.0.md b/doc/changes/changes_3.0.0.md new file mode 100644 index 00000000..41cf3fbf --- /dev/null +++ b/doc/changes/changes_3.0.0.md @@ -0,0 +1,13 @@ +# 3.0.0 — 2022-07-14 + +## 🗑️ Removed +- The support of the turbodbc feature has been suspended, until the following issues have been addressed + * [Turbodbc #358](https://github.com/blue-yonder/turbodbc/issues/358) + * [Sqlalchemy-Exasol #146](https://github.com/exasol/sqlalchemy-exasol/issues/146) + * Note: If you depend on turbodbc we suggest you to use the latest version supporting it (2.4.0) + +- Dropped python 3.7 support + * If you still depend on python 3.7 use the 2.x version line +- Dropped conda forge support + + diff --git a/doc/changes/changes_3.1.1.md b/doc/changes/changes_3.1.1.md new file mode 100644 index 00000000..e1b156f9 --- /dev/null +++ b/doc/changes/changes_3.1.1.md @@ -0,0 +1,18 @@ +# 3.1.1 — 2022-07-21 + +## ✨ Added + +- Added new exasol odbc driver 7.1.11 +- Added additional badges for to improve project status overview + +## 🔧 Changed + +- Updated databases for testing to 7.1.9 and 7.0.18 +- Updated pyodbc dependency from 4.0.32 to 4.0.34 + +## 🐞 Fixed + +- Fixed CI/CD build and publish target +- Fixed CI/CD to run tests against all configured databases + + diff --git a/doc/changes/changes_3.2.2.md b/doc/changes/changes_3.2.2.md new file mode 100644 index 00000000..474cd22c --- /dev/null +++ b/doc/changes/changes_3.2.2.md @@ -0,0 +1,21 @@ +# 3.2.2 — 2022-08-12 + +## ✨ Added + +- Added turbodbc support + * Re-enabled with new minimum base version 4.5.4 +- Added additional information to README + * License information (badge) + * Code formatter(s) in use (black, isort) + * Linting score of the project + +## 🔧 Changed + +- Changed changelog format + * Changelog now can be found in the file CHANGELOG.rst +- Reworked and restructured project documentation + +## 🗑️ Removed + +- Removed markdown based changelog + diff --git a/doc/changes/changes_4.0.0.md b/doc/changes/changes_4.0.0.md new file mode 100644 index 00000000..e77b1b3c --- /dev/null +++ b/doc/changes/changes_4.0.0.md @@ -0,0 +1,40 @@ +# 4.0.0 — 2022-12-01 + +## ✨ Added + +* Added support for SQLA 1.4 + + **🚨 Attention:** + + This upgrade is not backwards compatible with SQLA < 1.4 + + This version may impact the performance (see also [SQLAlchemy docs](https://docs.sqlalchemy.org/en/14/faq/performance.html#why-is-my-application-slow-after-upgrading-to-1-4-and-or-2-x)). + If you are not willing or able to pay those potential performance hits, you should wait until the [tracking-issue #190](https://github.com/exasol/sqlalchemy-exasol/issues/190>) is resolved. + + +## 🗑️ Removed + +* Removed custom merge statement + + (If we will be notified, that someone depends on this feature, we are open to add it again.) + +## 🔐 Security + +- Evaluated CVE-2022-42969 + - CVE will be silenced + - The affected code is not used by our project itself, + nor by the dependencies pulling in the vulnerable library. + + Checked dependencies: + + * Nox (Code search) + * Pytest (Code search + [tracking-issue #10392](https://github.com/pytest-dev/pytest/issues/10392>)) + +## 🔧 Changed + +- Updated all dependencies + +## 🐞 Fixed + +- Fixed link to project documentation + diff --git a/doc/changes/changes_4.4.0.md b/doc/changes/changes_4.4.0.md new file mode 100644 index 00000000..f485bd11 --- /dev/null +++ b/doc/changes/changes_4.4.0.md @@ -0,0 +1,39 @@ +# 4.4.0 — 2023-05-16 + +**🚨 Attention:** + +The turbodbc dependency was pinned to `4.5.4` due to issues with newer versions. + +Failing tests in the SQLA compliance test suite, in regard to the turbodbc dialect +won't be addressed until explicitly required/requested by users. + +Note: It is also very likely that turbodbc support will be dropped in future versions. + +## 🐞 Fixed + +* Fixed invalid implicit autocommit behaviour, for details see [this issue](https://github.com/exasol/sqlalchemy-exasol/issues/335). + +## ✨ Added + +* Added websocket based dbapi2 compliant database driver + +## 🔧 Changed + +* Updated pytest +* Updated Dependencies +* Loosened version constraints on 'packaging' dependency +* Loosened dev dependency constraints + +## 🧰 Internal +* Changed changelog workflow + + - Removed scriv + - Added unreleased section to track unreleased changes + +* Simplified workflows by factoring out python & poetry setup into an action +* Added a internal category to the changelog fragment template +* Added manual trigger for the gh-pages workflow +* Removed workaround for outdated DB versions + (for further details see [here](https://github.com/exasol/sqlalchemy-exasol/issues/5)) +* Added exasol-integration-test-docker-environment as dev dependency + diff --git a/doc/changes/changes_4.5.0.md b/doc/changes/changes_4.5.0.md new file mode 100644 index 00000000..218bb97f --- /dev/null +++ b/doc/changes/changes_4.5.0.md @@ -0,0 +1,13 @@ +# 4.5.0 — 2023-05-24 + +* Added Beta version of websocket based dialect + + **🚨 Attention:** + + This feature is currently in Beta, therefore it should not be used in production. + We also recommend to have a look into the known issues, before you start using it. + + If you encounter any problem, please [create an issue](https://github.com/exasol/sqlalchemy-exasol/issues/new?assignees=&labels=bug&projects=&template=bug.md&title=%F0%9F%90%9E+%3CInsert+Title%3E). + With your feedback, we will be able stabilize this feature more quickly. + + diff --git a/doc/changes/changes_4.5.1.md b/doc/changes/changes_4.5.1.md new file mode 100644 index 00000000..8c4b0b31 --- /dev/null +++ b/doc/changes/changes_4.5.1.md @@ -0,0 +1,6 @@ +# 4.5.1 — 2023-05-25 + +## 🐞 Fixed + +- Fixed missing websocket driver package in release deliverables + diff --git a/doc/changes/changes_4.6.0.md b/doc/changes/changes_4.6.0.md new file mode 100644 index 00000000..242d24d4 --- /dev/null +++ b/doc/changes/changes_4.6.0.md @@ -0,0 +1,13 @@ +# 4.6.0 — 2023-07-18 + +## 🚀 Feature + +- Websocket based dialect have been stabilized and is officially supported now + + 📘 Note: Inserting multiple empty row's, facilitating default settings currently isn't supported. + +## 🐞 Fixed + +- Fixed [prepared statements send the wrong types as parameters to the server](https://github.com/exasol/sqlalchemy-exasol/issues/341) +- Fixed [Various SQLA compliance tests are failing for the websocket based dialect](https://github.com/exasol/sqlalchemy-exasol/issues/342) + diff --git a/doc/changes/changes_4.6.1.md b/doc/changes/changes_4.6.1.md new file mode 100644 index 00000000..143419ab --- /dev/null +++ b/doc/changes/changes_4.6.1.md @@ -0,0 +1,7 @@ +# 4.6.1 — 2023-11-06 + +## 🐞 Fixed + +- Fixed [WebSocket connection isn't properly closed in case of process termination](https://github.com/exasol/pyexasol/issues/108) + + diff --git a/doc/changes/changes_4.6.2.md b/doc/changes/changes_4.6.2.md new file mode 100644 index 00000000..53a7f635 --- /dev/null +++ b/doc/changes/changes_4.6.2.md @@ -0,0 +1,6 @@ +# 4.6.2 — 2023-11-22 + +## 🔧 Changed + +- Loosened the SQLAlchemy dependency constraint to `>=1.4,<2` + diff --git a/doc/changes/changes_4.6.3.md b/doc/changes/changes_4.6.3.md new file mode 100644 index 00000000..e3e451ce --- /dev/null +++ b/doc/changes/changes_4.6.3.md @@ -0,0 +1,13 @@ +# 4.6.3 — 2023-12-21 + +## 🔧 Changed + +- Changed pyodbc upper bound constraint + (Allow larger upper bounds) + +## 🧰 Internal + +- Relocked dependencies +- Bumped versions of GitHub actions +- Adjusted workflow triggers, to enable workflow runs for external branches + diff --git a/doc/changes/changes_5.0.0.md b/doc/changes/changes_5.0.0.md new file mode 100644 index 00000000..c3f45d1a --- /dev/null +++ b/doc/changes/changes_5.0.0.md @@ -0,0 +1,11 @@ +# 5.0.0 — 2024-02-02 + +## 🔧 Changed + +- Made pyodbc an optional dependency +- Made websockets the default way to use sqlalchemy with exasol +- Added deprecation warnings for pyodbc and trubodbc dialects + +## 🧰 Internal + +- Relocked dependencies diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md new file mode 100644 index 00000000..5d81eb3a --- /dev/null +++ b/doc/changes/unreleased.md @@ -0,0 +1,18 @@ +# Unreleased + +## 🗑️ Removed + +- Dropped python 3.8 support + * If you still depend on python 3.8 use the 5.x version line + +## 🧰 Internal + +- Removed pyexasol dbapi2 api shim + (Now it is using the dbapi2 shim provided by the pyexasol project) +- Remove testing against Exasol 7.0 +- Relocked dependencies + +## 📚 Documentation + +* Added support for multiversion documentation + diff --git a/doc/conf.py b/doc/conf.py index b85c68ee..897e636f 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -10,14 +10,10 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -# import os +import os import sys -from pathlib import Path -SPHINX_ROOT = Path(__file__).parent -sys.path.insert(0, f"{SPHINX_ROOT.parent.resolve()}") - -from sqlalchemy_exasol.version import VERSION +sys.path.insert(0, os.path.abspath("../")) # -- Project information ----------------------------------------------------- @@ -25,15 +21,34 @@ copyright = "2022, Exasol & Blue Yonder" author = "Exasol, Blue Yonder" -# The full version, including alpha/beta/rc tags -release = VERSION - # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ["sphinx_copybutton", "sphinx.ext.intersphinx"] +extensions = [ + "sphinx.ext.todo", + "sphinx.ext.autodoc", + "sphinx.ext.viewcode", + "sphinx.ext.napoleon", + "sphinx.ext.intersphinx", + "sphinx.ext.autosummary", + "sphinx_copybutton", + "myst_parser", + "sphinx_design", + "exasol.toolbox.sphinx.multiversion", +] + +intersphinx_mapping = {"python": ("https://docs.python.org/3", None)} + +# Make sure the target is unique +source_suffix = { + ".rst": "restructuredtext", + ".txt": "markdown", + ".md": "markdown", +} + +todo_include_todos = True # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] @@ -48,14 +63,16 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "furo" -html_title = f"SQLAlchemy-Exasol {release}" -html_theme_options = { - "light_logo": "light-exasol-logo.svg", - "dark_logo": "dark-exasol-logo.svg", -} +html_theme = "shibuya" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] +html_title = "sqlalchemy-exasol" +html_theme_options = { + "light_logo": "_static/light-exasol-logo.svg", + "dark_logo": "_static/dark-exasol-logo.svg", + "github_url": "https://github.com/exasol/{{cookiecutter.repo_name}}", + "accent_color": "grass", +} diff --git a/doc/developer_guide/index.rst b/doc/developer_guide/index.rst index 2dadcda5..35793e74 100644 --- a/doc/developer_guide/index.rst +++ b/doc/developer_guide/index.rst @@ -1,3 +1,8 @@ +.. _developer_guide: + +:octicon:`tools` Developer Guide +================================ + .. include:: developer_guide.rst .. toctree:: diff --git a/doc/faq.rst b/doc/faq.rst new file mode 100644 index 00000000..c912364e --- /dev/null +++ b/doc/faq.rst @@ -0,0 +1,6 @@ +.. _faq: + +:octicon:`question` FAQ +======================= + + diff --git a/doc/index.rst b/doc/index.rst index 70e4df42..681b446a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,36 +1,35 @@ -SQLAlchemy-Exasol -================= -SQLAlchemy-Exasol is a dialect extension for SQLAlchemy, implementing support for Exasol databases. +Documentation of SQLAlchemy-Exasol +================================== -Getting Started ---------------- +.. grid:: 1 1 3 2 + :gutter: 2 + :padding: 0 + :class-container: surface -#. Install the `SQLAlchemy-Exasol extension `_ + .. grid-item-card:: :octicon:`person` User Guide + :link: user_guide + :link-type: ref - .. code-block:: shell + Resource for users to understand how to utilize this project and its features. - $ pip install sqlalchemy-exasol + .. grid-item-card:: :octicon:`tools` Developer Guide + :link: developer_guide + :link-type: ref - .. note:: + Instructions and best practices to help developers contribute to the project and set up their development environment. - SQLAlchemy will be installed due to the fact that it is an required dependency for SQLAlchemy-Exasol. + .. grid-item-card:: :octicon:`question` FAQ + :link: faq + :link-type: ref -#. Execute queries - - .. code-block:: python - - from sqlalchemy import create_engine - url = "exa+pyodbc://A_USER:A_PASSWORD@192.168.1.2..8:1234/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC" - e = create_engine(url) - r = e.execute("select 42 from dual").fetchall() - - -For more details on SQLAlchemy consult it's `documenation `_. + Frequently asked questsions. .. toctree:: - :maxdepth: 3 + :maxdepth: 1 :hidden: - readme + user_guide developer_guide/index - changelog + faq + changes/changelog + diff --git a/doc/readme.rst b/doc/readme.rst deleted file mode 100644 index 00756733..00000000 --- a/doc/readme.rst +++ /dev/null @@ -1,5 +0,0 @@ -Readme -______ - -.. include:: ../README.rst - :end-before: Development & Testing diff --git a/doc/user_guide.rst b/doc/user_guide.rst new file mode 100644 index 00000000..3d0b573f --- /dev/null +++ b/doc/user_guide.rst @@ -0,0 +1,37 @@ +.. _user_guide: + +:octicon:`person` User Guide +============================ + +SQLAlchemy-Exasol is a dialect extension for SQLAlchemy, implementing support for Exasol databases. + +Getting Started +~~~~~~~~~~~~~~~ + +#. Install the `SQLAlchemy-Exasol extension `_ + + .. code-block:: shell + + $ pip install sqlalchemy-exasol + + .. note:: + + SQLAlchemy will be installed due to the fact that it is an required dependency for SQLAlchemy-Exasol. + +#. Execute queries + + .. code-block:: python + + from sqlalchemy import create_engine + url = "exa+pyodbc://A_USER:A_PASSWORD@192.168.1.2..8:1234/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC" + e = create_engine(url) + r = e.execute("select 42 from dual").fetchall() + + +For more details on SQLAlchemy consult it's `documenation `_. + +Readme +~~~~~~ + +.. include:: ../README.rst + :end-before: Development & Testing diff --git a/noxconfig.py b/noxconfig.py new file mode 100644 index 00000000..0b8694a3 --- /dev/null +++ b/noxconfig.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from dataclasses import dataclass +from pathlib import Path +from typing import Iterable + + +@dataclass(frozen=True) +class Config: + root: Path = Path(__file__).parent + doc: Path = Path(__file__).parent / "doc" + version_file: Path = Path(__file__).parent / "sqlalchemy_exasol" / "version.py" + path_filters: Iterable[str] = ( + "dist", + ".eggs", + "venv", + ) + + plugins = [] + + +PROJECT_CONFIG = Config() diff --git a/noxfile.py b/noxfile.py index 067bb68e..b19047fe 100644 --- a/noxfile.py +++ b/noxfile.py @@ -8,12 +8,14 @@ from shutil import rmtree from tempfile import TemporaryDirectory +# fmt: off PROJECT_ROOT = Path(__file__).parent # scripts path also contains administrative code/modules which are used by some nox targets SCRIPTS = PROJECT_ROOT / "scripts" DOC = PROJECT_ROOT / "doc" DOC_BUILD = DOC / "build" sys.path.append(f"{SCRIPTS}") +# fmt: on from typing import Iterator @@ -288,42 +290,6 @@ def parser() -> ArgumentParser: session.notify(find_session_runner(session, "db-stop")) -@nox.session(python=False, name="clean-docs") -def clean(session: Session) -> None: - """Remove all documentation artifacts""" - if DOC_BUILD.exists(): - rmtree(DOC_BUILD.resolve()) - session.log(f"Removed {DOC_BUILD}") - - -@nox.session(python=False, name="build-docs") -def build(session: Session) -> None: - """Build the documentation""" - session.run( - "poetry", - "run", - "sphinx-build", - "-b", - "html", - "-W", - f"{DOC}", - f"{DOC_BUILD}", - external=True, - ) - - -@nox.session(python=False, name="open-docs") -def open_docs(session: Session) -> None: - """Open the documentation in the browser""" - index_page = DOC_BUILD / "index.html" - if not index_page.exists(): - session.error( - f"File {index_page} does not exist." "Please run `nox -s build-docs` first" - ) - - webbrowser.open_new_tab(index_page.resolve().as_uri()) - - @nox.session(python=False) def release(session: Session) -> None: """Release a sqlalchemy-exasol package. For more details append '-- -h'""" @@ -482,3 +448,14 @@ def list_links(session: Session) -> None: """List all links within the documentation""" for path, url in _urls(_documentation(PROJECT_ROOT)): session.log(f"Url: {url}, File: {path}") + + +# fmt: off +from exasol.toolbox.nox._documentation import ( + build_docs, + build_multiversion, + clean_docs, + open_docs, +) + +# fmt: on diff --git a/poetry.lock b/poetry.lock index ad324ad6..d0ec4bd8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "alabaster" @@ -94,6 +94,31 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +[[package]] +name = "bandit" +version = "1.8.0" +description = "Security oriented static analyser for python code." +optional = false +python-versions = ">=3.9" +files = [ + {file = "bandit-1.8.0-py3-none-any.whl", hash = "sha256:b1a61d829c0968aed625381e426aa378904b996529d048f8d908fa28f6b13e38"}, + {file = "bandit-1.8.0.tar.gz", hash = "sha256:b5bfe55a095abd9fe20099178a7c6c060f844bfd4fe4c76d28e35e4c52b9d31e"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} +PyYAML = ">=5.3.1" +rich = "*" +stevedore = ">=1.20.0" +tomli = {version = ">=1.1.0", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} + +[package.extras] +baseline = ["GitPython (>=3.1.30)"] +sarif = ["jschema-to-python (>=1.2.3)", "sarif-om (>=1.0.4)"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] +toml = ["tomli (>=1.1.0)"] +yaml = ["PyYAML"] + [[package]] name = "bcrypt" version = "4.2.0" @@ -752,6 +777,42 @@ 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 = "exasol-toolbox" +version = "0.19.0" +description = "Your one-stop solution for managing all standard tasks and core workflows of your Python project." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "exasol_toolbox-0.19.0-py3-none-any.whl", hash = "sha256:bc29492a552d64d921b5a70985f9ca1821a3eda15ceb382d5750dd574ef94ec3"}, + {file = "exasol_toolbox-0.19.0.tar.gz", hash = "sha256:32a9bfa867c1f24e113a06c026f4f660fea63fb563805983b084caae2a7e44bd"}, +] + +[package.dependencies] +bandit = {version = ">=1.7.9,<2.0.0", extras = ["toml"]} +black = ">=24.1.0" +coverage = ">=6.4.4,<8.0.0" +furo = ">=2022.9.15" +import-linter = ">=2.0,<3.0" +importlib-resources = ">=5.12.0" +isort = ">=5.12.0,<6.0.0" +jinja2 = ">=3.1.4,<4.0.0" +mypy = ">=0.971" +myst-parser = ">=2.0.0,<4" +nox = ">=2022.8.7" +pluggy = ">=1.5.0,<2.0.0" +pre-commit = ">=4" +prysk = {version = ">0.17.0,<1", extras = ["pytest-plugin"]} +pylint = ">=2.15.4" +pytest = ">=7.2.2,<9" +pyupgrade = ">=2.38.2,<4.0.0" +shibuya = ">=2024.5.14" +sphinx = ">=5.3,<8" +sphinx-copybutton = ">=0.5.0,<0.6.0" +sphinx-design = ">=0.5.0,<1" +sphinx-inline-tabs = ">=2023.4.21,<2024.0.0" +typer = {version = ">=0.7.0", extras = ["all"]} + [[package]] name = "exceptiongroup" version = "1.2.2" @@ -937,6 +998,109 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "grimp" +version = "3.5" +description = "Builds a queryable graph of the imports within one or more Python packages." +optional = false +python-versions = ">=3.9" +files = [ + {file = "grimp-3.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:73538d288752ea7b10fdfd05406a1c1507531b5763ad97994cd1646283112d93"}, + {file = "grimp-3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c2f4a16626b6de9f5ea6e87e685e5810be7712461ef29260c67b5b868f64ae5"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5d495c9d527535872d78dfbc0f74f2650ad6b13e12f7d8b11da9d91ebaf2bda"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2ea1402221bf00dee7ae5357ef549151b1ad213a892cfe734b7156413d99a38"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a71a6c4e411adfeb6b8ba0fc5eff60505bf758aea9e4c7169a6fce5a57833cf"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60e92da02c72eebb9f1aaecd48c3b9fd234de6a6427da6b2232918cb88b409c0"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f9db004a253329f480a3ec0b0929558a6427f2db0610900b57fded591f6e3be"}, + {file = "grimp-3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fa6188b077339f030973b6cb3e1947175c45f6f9a472162435a5f80afd21805"}, + {file = "grimp-3.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3140ec48aaa43e124a735878fdf527cad7fa65230c2b69abc8124a22afb755bc"}, + {file = "grimp-3.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:7e6f9af573b59bb0dd07e182482277922889329672cb418a0e8617de3aaf4922"}, + {file = "grimp-3.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:374ad436ffdd29ffd6ae4b2a345783aad08f0d674b1ee01b55b824420b6f8e85"}, + {file = "grimp-3.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b10e7d4f67bae4326275b63aa1987652f6d673264fd8e2eb6804d64e0bfc4fa2"}, + {file = "grimp-3.5-cp310-none-win32.whl", hash = "sha256:077a0e5fe97a95183e9302615dd10b69f4b378efb9158504a57b7e71871259a3"}, + {file = "grimp-3.5-cp310-none-win_amd64.whl", hash = "sha256:80a04c1559bfe45a8cb49caf160391e180cf24db9af443f34ed01e5ededba025"}, + {file = "grimp-3.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3d2130cbdbcd01ae65ebe39520f8a38e5f4ed445a4989eb1c8c0796759ddc5c6"}, + {file = "grimp-3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2f9fdafc36dcf3ae80f7da2696bc7cbd1ef73ddd0f043446d63facc474cb2ab"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2320207ad620ed383533f3178783b5d82a9f100dbc9d7fc1c50e40275dc9a002"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24b83512a3195c4f927e3968b0c61db9c6d5758f748bf6d3fec197f0b61309e8"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6abffdfe3b70723fe6a61f3c3e2c5c415a18d06387929bf4b223aa050c618d3"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ba4988e1c96415d02f49b4677e1a219c048c2cbb358c812c99b303310f4adaa"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3d11d7ed0b0313cb378a5d138f4644189ffc77fb358d60d21d54c3d32f0a5a5"}, + {file = "grimp-3.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b175fb636e7d2d1e6feb79ad09794740b03458eb838c341e51112beee8ae5f6e"}, + {file = "grimp-3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a93990401856d4ba7620faa123d1949059b2b5c169b6ef1bdf4d1f8df316c0a1"}, + {file = "grimp-3.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f8676bc2e0ecdc61376aba038b8ebd3380630a78f1c44426b393dd616eb3899b"}, + {file = "grimp-3.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e270c5342302aabf97ad4e810101fcfc38c5f9360cbdd5b6f653ce43f29bf1bf"}, + {file = "grimp-3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e6682704bd7c3a2f9098747b524038f15df4d1456aded3265596fb2360fca872"}, + {file = "grimp-3.5-cp311-none-win32.whl", hash = "sha256:7aa32379f91494d1f1779a3e469ebf5d3e515c8c978bb5d585f6a87c297f45a1"}, + {file = "grimp-3.5-cp311-none-win_amd64.whl", hash = "sha256:bbcd2468a2609a8c662429ed34357ff50efb194c00c1c88a6336c92d662439ad"}, + {file = "grimp-3.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e09db10a7395b3930ebe95eee2ac440c5ee24ce77b6171e807a8aacb4625cca2"}, + {file = "grimp-3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:977c6b220671d7332657be13c51e4f6f38c76d911680f844806a5346142910fc"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f4e2159c3c75b62f9ea59a539ac93f89b9ced38811b453d3b78be62c8395b01"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d7bb3f2178b3a8115eca5f6ea5f766a283b8a7ede84fbbdda2a40b7d28624cb"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e023c883a83fa8ca1a613b1e8b39834545818971a8d94977bcd4b491537cde"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce7440c8498fa5b47acfffce7fe42d6c63be94dbe2fff7f524522fa7e422e0eb"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0724f60d7cccf2c94616f0282ba8eec85a1956b59b8d22274409a60539fc462"}, + {file = "grimp-3.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a486e985fa4d4fb9dc6ebb094ed17a293809ff5cf6532bba26a5ae064d350539"}, + {file = "grimp-3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a98f06d58b0cb7b8bfe5846d8ab07adb36c313dd3c7298836ddd3df98a8344a"}, + {file = "grimp-3.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:13924943d6e5a0f0150c8f2a05d87042f03510b633b198ac3dd5c4274d36f28c"}, + {file = "grimp-3.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8194ac4c54fac7641bfcef332aaec1af590e97b2aa8993e47a7c51ff84220f44"}, + {file = "grimp-3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3f83b85aad278dfcaf2bf27b9cfa6dd6533dd96ecc510ba3bc0141344686857f"}, + {file = "grimp-3.5-cp312-none-win32.whl", hash = "sha256:f88307f0e50883ab73cc59164a5a9396e8e1c8b68b8e2edef68d478b91d81000"}, + {file = "grimp-3.5-cp312-none-win_amd64.whl", hash = "sha256:6fa422c150597f8e6ad51c4fe2b271747057abe638acca5eebb2162e536065ed"}, + {file = "grimp-3.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:448dba63f938d0e13e6121559749816e3b2644202c912cc308e7608c6034737a"}, + {file = "grimp-3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:17113aba41269d0ee91512c96eeb850c7c668440c6a8e0bfc94d17762184b293"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a55614945c319d1dc692c3e43f3a02b80c116a1298e593f5f887b97e6c983a"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aba7ce7839b72efb4c6d06404d2b2a3026e28dd89816f4e546b3cd6626cbeeb1"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eaedfba320a70d87b14acb25a685c8629586b943129c71ffd02b47d9531c11ce"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60a9afd3dd00ad1d301a07f97e26bc9ecdc3d2db39ab6ac46c315a7dea0a96cb"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11c66039c0475e5c9fc6a086264f11870181ae79f603caa5dffa1411ddad636b"}, + {file = "grimp-3.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bff39a0061790f074f86a7841cd8e6064aa7b2208cb1ee5c3f2e685dead2b66e"}, + {file = "grimp-3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf7f5367c4a87b8e9f08c09e7401d2d73f21cb65d6142445819f9df0d6ab3f6b"}, + {file = "grimp-3.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:edee4b087f007dab8b65461caf6a1b67b2f9480cceb5f6aceea87008d8f283c4"}, + {file = "grimp-3.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6af125013ad2a56c18f2f53a3fcabbfbe96c70374abecd6f14b82dc444726ebe"}, + {file = "grimp-3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:24aabae0183ca5fd5a710257ff37120b55d8e6d6d4cbb2c08481552832e5c901"}, + {file = "grimp-3.5-cp313-none-win32.whl", hash = "sha256:506091bfd600dd7ad427586998ef5e54a2098485148a1499bd9af5943d2fb0b7"}, + {file = "grimp-3.5-cp313-none-win_amd64.whl", hash = "sha256:099388df82d922ddc589f362f1a523ab053c8dee5d29a6b622b2cddf481c6a2f"}, + {file = "grimp-3.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:4bec3fbe008c8f8c546a640e6e74a519c9d33720c315c72013f1b6455543d1a9"}, + {file = "grimp-3.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea11cf5a0e1cd8fb1a119304128c85162bb2e4ad49c7583ab7835c783fc45457"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a63b444410c78763b506c9f31cd813b5c3ff3ed14100d102f1a705201f70f2f"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fffb6e7b066636e69f1b70ed617891d04efc14c8d740015026c6c01ede03196f"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:057a4afece42540d51817f8acca889bde87d78720ff7bf51833b27a83ea0a74b"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a59650956cd1e29810a5611395560c33a27cf3acddd587437745c8b136a820"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57d35306da73b62d3d29fc482e8add9e6781fc004ca080c1b74b0d21d62e1613"}, + {file = "grimp-3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb3a24b5f4c1b19a19712855dbb82a7d82d8dc565e99464c3fb15fefd5ae81ae"}, + {file = "grimp-3.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bb3adae6cc3938aa487fc206c4a44af026907ec98322c738e5f2f3435e34e7cd"}, + {file = "grimp-3.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:b14b00f15bf1e5901ec50fad0b4238522aef7b37b0cce770c100e387e278cd6e"}, + {file = "grimp-3.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:40c6473a12ac8f71f66d3215269011fd8e480b99947f1dbb12e1d83b3fc3df74"}, + {file = "grimp-3.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2967cef66f123f9c90281ad2525995302dea3d52416e5177b3eb9cd7eea0f617"}, + {file = "grimp-3.5-cp39-none-win32.whl", hash = "sha256:d1aeb5ffb188d10a28a4508cc33e5f06f03a032c484a8b2d5bd0a2fad115d3c2"}, + {file = "grimp-3.5-cp39-none-win_amd64.whl", hash = "sha256:98d6be78ffabc28016d313847ff990f2625b6d2c7015edd34f0bad4be97bb648"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c0ea0c652c3aea99411921e1a43b015c4ef96466a8b0d78b8d15c820228ca"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:33da59560da889ad41018f0c93f58833018922a1fff7ae44bcf20a0644bda9fc"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8ee28ff91df8e6c8ce2ea4334bb487ebd7adeef94f6d0170314cb3e0179e272"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dca05a5beb2346630968127612ebd7771084890297d4de25cde24ac937dc11b"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb6feb9667349fba87d85d210a85480e43dc96a65b6229baf3a0439ebf44613f"}, + {file = "grimp-3.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b35460a314a720d1a332222621dc9a8b412d9c56bc19866019d6c6451cc09dc"}, + {file = "grimp-3.5-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:03350ec0378d984d6d8ff09fa607ecdeca59d8ee4636a029f1a7475e8a9cd74a"}, + {file = "grimp-3.5-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:d9ef6c6c8d1d64eabb555a7ecf4ec3dce91d0ade54b3724a03169a298a65f2f7"}, + {file = "grimp-3.5-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:813ec51de74800043c543ab2979dd7b383aeb6b5cd52adf092ef7fa69c6c2b2f"}, + {file = "grimp-3.5-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1966b0059b38b5aeca9da3fb3c036590d783d7330eb9e1300b2779f7e6d41650"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca26b2e1acd3ecfba14a9987dc2cf81b44cd05be755e7a112e05ae8c54626548"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d2257a4abfe40578e546e2f74b698b58645aeb3137fd7c3c95ac49a84ebe3009"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c07bab1917ae798381a63f065e804fb1b5797bb727bb17671453bb6c02639944"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74b035af58fa6171f07972bac3cb970ac409c10c222515c913b468c7e067f23a"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba0066ab7d081c1637947a82c744081654150e9dcb6967ae9bdad3a69a55224c"}, + {file = "grimp-3.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e6f7d75e9f32022b57ca9d83239a0325a495cb6dc3ddb629654aa3d30f0a88"}, + {file = "grimp-3.5-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:697ec33b8ed0803b5c7ca68d297d90cfc36940b2a4fc64651bf29953f126ada3"}, + {file = "grimp-3.5-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1f3b3a8f309c9a9026324745f744ffc60cd54d1a07bc1ddbb1ba73e7bacb2a78"}, + {file = "grimp-3.5-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:320bcca184841f7935df8c50636607e452ebea1891e9985a6fe9b82b96a3cd6c"}, + {file = "grimp-3.5-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed910d51b1105799882beb3936d5dcb7617ae17494864bbef01617e52c9866f4"}, + {file = "grimp-3.5.tar.gz", hash = "sha256:dc9560aed1d82222b361fe5f312a775b15a96b9237670f3a9fb20f44d30d5762"}, +] + +[package.dependencies] +typing-extensions = ">=3.10.0.0" + [[package]] name = "h11" version = "0.14.0" @@ -1058,6 +1222,23 @@ files = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] +[[package]] +name = "import-linter" +version = "2.1" +description = "Enforces rules for the imports within and between Python packages." +optional = false +python-versions = ">=3.9" +files = [ + {file = "import_linter-2.1-py3-none-any.whl", hash = "sha256:324d65035f0252a8e432f60256b0d0d32d8d5d6e4f8fd29716688b09d7a2217a"}, + {file = "import_linter-2.1.tar.gz", hash = "sha256:393fadb2e91304c22c5ceab575213ed2b6a794abc7bd05ab345f2430930b2eae"}, +] + +[package.dependencies] +click = ">=6" +grimp = ">=3.2" +tomli = {version = ">=1.2.1", markers = "python_version < \"3.11\""} +typing-extensions = ">=3.10.0.0" + [[package]] name = "importlib-metadata" version = "8.5.0" @@ -1320,6 +1501,25 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "mdit-py-plugins" +version = "0.4.2" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "mdurl" version = "0.1.2" @@ -1394,6 +1594,32 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "myst-parser" +version = "3.0.1" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1"}, + {file = "myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87"}, +] + +[package.dependencies] +docutils = ">=0.18,<0.22" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "sphinx (>=7)", "sphinx-autodoc2 (>=0.5.0,<0.6.0)", "sphinx-book-theme (>=1.1,<2.0)", "sphinx-copybutton", "sphinx-design", "sphinx-pyscript", "sphinx-tippy (>=0.4.3)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.9.0,<0.10.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "defusedxml", "pytest (>=8,<9)", "pytest-cov", "pytest-param-files (>=0.6.0,<0.7.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0,<0.7.0)"] + [[package]] name = "netaddr" version = "1.3.0" @@ -1502,6 +1728,17 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] +[[package]] +name = "pbr" +version = "6.1.0" +description = "Python Build Reasonableness" +optional = false +python-versions = ">=2.6" +files = [ + {file = "pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a"}, + {file = "pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24"}, +] + [[package]] name = "platformdirs" version = "4.3.6" @@ -1570,6 +1807,24 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prysk" +version = "0.20.0" +description = "Functional tests for command line applications" +optional = false +python-versions = "<4.0.0,>=3.8" +files = [ + {file = "prysk-0.20.0-py3-none-any.whl", hash = "sha256:3758f59febe1ff27710c8ba69a8edad42286050d041ed8df519fc4bbeea41133"}, + {file = "prysk-0.20.0.tar.gz", hash = "sha256:3499d24c9c8d534754d3915218cb2ab59cf59a8d6f37acfb68dc582650e67e33"}, +] + +[package.dependencies] +pytest-prysk = {version = ">=0.2.0,<0.3.0", optional = true, markers = "extra == \"pytest-plugin\""} +rich = ">=13.3.1,<14.0.0" + +[package.extras] +pytest-plugin = ["pytest-prysk (>=0.2.0,<0.3.0)"] + [[package]] name = "pyasn1" version = "0.6.1" @@ -1900,6 +2155,21 @@ pytest = ">=7.0.0" [package.extras] test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] +[[package]] +name = "pytest-prysk" +version = "0.2.0" +description = "Pytest plugin for prysk" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_prysk-0.2.0-py3-none-any.whl", hash = "sha256:3180a9d3a6634e6e70107b2eed2a6a7420630b14ba2036598ef690f9b71be79f"}, + {file = "pytest_prysk-0.2.0.tar.gz", hash = "sha256:488d1f77e35beec9cad13e11368dcc5d09555ec31a4d6a3f9d901e78bbeeb2d1"}, +] + +[package.dependencies] +prysk = ">=0.15.0" +pytest = ">=7.3.2,<8.0.0" + [[package]] name = "python-daemon" version = "3.0.1" @@ -2111,6 +2381,31 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "shibuya" +version = "2024.10.15" +description = "A clean, responsive, and customizable Sphinx documentation theme with light/dark mode." +optional = false +python-versions = ">=3.7" +files = [ + {file = "shibuya-2024.10.15-py3-none-any.whl", hash = "sha256:46d32c4dc7f244bfe130e710f477f4bda64706e5610916089371509992cae5e6"}, + {file = "shibuya-2024.10.15.tar.gz", hash = "sha256:fc057a32a2dcdca9f0f85616f9fff5b3007500bf42ff4eeb1d68fae124b1a51d"}, +] + +[package.dependencies] +Sphinx = "*" + [[package]] name = "simplejson" version = "3.19.3" @@ -2356,6 +2651,49 @@ sphinx = ">=1.8" code-style = ["pre-commit (==2.12.1)"] rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] +[[package]] +name = "sphinx-design" +version = "0.6.1" +description = "A sphinx extension for designing beautiful, view size responsive web components." +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c"}, + {file = "sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632"}, +] + +[package.dependencies] +sphinx = ">=6,<9" + +[package.extras] +code-style = ["pre-commit (>=3,<4)"] +rtd = ["myst-parser (>=2,<4)"] +testing = ["defusedxml", "myst-parser (>=2,<4)", "pytest (>=8.3,<9.0)", "pytest-cov", "pytest-regressions"] +testing-no-myst = ["defusedxml", "pytest (>=8.3,<9.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2024.7.18,<2024.8.0)"] +theme-im = ["sphinx-immaterial (>=0.12.2,<0.13.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.15.2,<0.16.0)"] +theme-rtd = ["sphinx-rtd-theme (>=2.0,<3.0)"] +theme-sbt = ["sphinx-book-theme (>=1.1,<2.0)"] + +[[package]] +name = "sphinx-inline-tabs" +version = "2023.4.21" +description = "Add inline tabbed content to your Sphinx documentation." +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx_inline_tabs-2023.4.21-py3-none-any.whl", hash = "sha256:06809ac613f7c48ddd6e2fa588413e3fe92cff2397b56e2ccf0b0218f9ef6a78"}, + {file = "sphinx_inline_tabs-2023.4.21.tar.gz", hash = "sha256:5df2f13f602c158f3f5f6c509e008aeada199a8c76d97ba3aa2822206683bebc"}, +] + +[package.dependencies] +sphinx = ">=3" + +[package.extras] +doc = ["furo", "myst-parser"] +test = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" @@ -2527,6 +2865,20 @@ postgresql-psycopg2cffi = ["psycopg2cffi"] pymysql = ["pymysql", "pymysql (<1)"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +name = "stevedore" +version = "5.4.0" +description = "Manage dynamic plugins for Python applications" +optional = false +python-versions = ">=3.9" +files = [ + {file = "stevedore-5.4.0-py3-none-any.whl", hash = "sha256:b0be3c4748b3ea7b854b265dcb4caa891015e442416422be16f8b31756107857"}, + {file = "stevedore-5.4.0.tar.gz", hash = "sha256:79e92235ecb828fe952b6b8b0c6c87863248631922c8e8e0fa5b17b232c4514d"}, +] + +[package.dependencies] +pbr = ">=2.0.0" + [[package]] name = "stopwatch-py" version = "2.0.1" @@ -2639,6 +2991,23 @@ typing-extensions = ">=4.10.0" doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.3.0)"] test = ["coverage[toml] (>=7)", "mypy (>=1.2.0)", "pytest (>=7)"] +[[package]] +name = "typer" +version = "0.15.1" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +files = [ + {file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"}, + {file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + [[package]] name = "types-requests" version = "2.32.0.20241016" @@ -2872,4 +3241,4 @@ turbodbc = ["turbodbc"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "351acd740794bf3870c13c7f9b9d45f43786fc99de58a82dd76dd9fc5c35ce2b" +content-hash = "a54f4e080b16d1d13cba50b40181ac9c001af24028f95814225ccd78de06fb02" diff --git a/pyproject.toml b/pyproject.toml index 667346f1..91d09b0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,6 +94,7 @@ exasol-integration-test-docker-environment = "^3.1.0" pytest-history = ">=0.2.0" pyodbc = ">=4.0.34,<6" pytest-exasol-itde = ">=0.2.0,<1" +exasol-toolbox = "^0.19.0" [tool.poetry.extras] pyodbc = ["pyodbc"] @@ -131,7 +132,6 @@ max-module-lines = 800 [tool.mypy] files = [ - 'noxfile.py', 'scripts/**/*.py', # Incrementaly add files and paths to fix until the entire project is checked ] @@ -140,6 +140,10 @@ files = [ module = "pyodbc" ignore_missing_imports = true +[[tool.mypy.overrides]] +module = "exasol.toolbox" +ignore_missing_imports = true + [tool.scriv] new_fragment_template = "file: templates/fragment-template.rst" version = "literal: pyproject.toml: tool.poetry.version" diff --git a/scripts/links.py b/scripts/links.py index 58b63f3c..a7fb274f 100644 --- a/scripts/links.py +++ b/scripts/links.py @@ -45,7 +45,7 @@ def check(url: str) -> Tuple[Optional[int], str]: """Checks if an url is still working (can be accessed)""" try: # User-Agent needs to be faked otherwise some webpages will deny access with a 403 - req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) + req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/10.0"}) result = request.urlopen(req) return result.code, f"{result.msg}" except urllib.error.HTTPError as ex: