From dc2765fef13816c4d1f9a6d3630e8d7325c7d66d Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 11:46:52 +0000 Subject: [PATCH 01/20] Freeze dependencies --- .github/workflows/test.yml | 15 ++- Makefile | 16 ++- requirements-dev.txt | 264 +++++++++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 requirements-dev.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb86e38a3..f092bd094 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,6 +14,10 @@ jobs: test: strategy: fail-fast: false + matrix: + use-latest-deps: + - true + - false runs-on: ${{ inputs.os }} steps: - name: Checkout @@ -27,9 +31,18 @@ jobs: python-version: ${{ inputs.pyVersion }} - name: Run tests - run: make dev install test + # Tolerate failure when using latest deps; this is just an early warning notification + # that there may have been a breaking change in a dependency. + continue-on-error: ${{ matrix.use-latest-deps }} + run: | + if [ "${{ matrix.use-latest-deps }}" = "true" ]; then + make dev-latest test + else + make dev test + fi - name: Publish test coverage + if: ${{ !matrix.use-latest-deps }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/Makefile b/Makefile index c147f4074..532b384fc 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,26 @@ -dev: +dev-env: python3 -m venv .venv ifeq ($(OS), Windows_NT) .venv\Scripts\activate else . .venv/bin/activate endif + +dev: dev-env + # Install all dependencies from the requirements-dev.txt file + # Regenerate this file with `make update-dev-dep-lockfile` + pip install -r requirements-dev.txt + +dev-latest: dev-env + # Install all dependencies from the pyproject.toml file pip install '.[dev]' +install-pip-tools: + pip install pip-tools + +update-dev-dep-lockfile: install-pip-tools + pip-compile pyproject.toml --extra dev --output-file requirements-dev.txt + install: pip install . diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 000000000..4b2e43992 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,264 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.0 + # via pytest-cov +databricks-connect==17.0.0 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.73.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.73.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==2.3.0 + # via + # databricks-connect + # pandas +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # databricks-connect + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +pandas==2.3.0 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +protobuf==6.31.1 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.9 + # via databricks-connect +pyarrow==20.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +tzdata==2025.2 + # via pandas +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith + +# The following packages are considered to be unsafe in a requirements file: +# setuptools From 5ef035669d7d5a0f1096d453e0cfca84792962cb Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 11:48:34 +0000 Subject: [PATCH 02/20] roll back pandas --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 4b2e43992..92e2e6313 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -124,7 +124,7 @@ packaging==24.2 # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 +pandas==2.2.3 # rolled back from 2.3.0 because of https://github.com/pandas-dev/pandas/issues/61579 # via databricks-connect parso==0.8.4 # via jedi From 90ce45fd463b756a4f073bc01f61197995b79ca4 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 11:52:59 +0000 Subject: [PATCH 03/20] fix --- .github/workflows/test.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f092bd094..19ea81916 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,9 +31,6 @@ jobs: python-version: ${{ inputs.pyVersion }} - name: Run tests - # Tolerate failure when using latest deps; this is just an early warning notification - # that there may have been a breaking change in a dependency. - continue-on-error: ${{ matrix.use-latest-deps }} run: | if [ "${{ matrix.use-latest-deps }}" = "true" ]; then make dev-latest test @@ -42,7 +39,6 @@ jobs: fi - name: Publish test coverage - if: ${{ !matrix.use-latest-deps }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file From 75f55d03707d0b29a5eab82c2f2f0e0f22634c30 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 11:53:15 +0000 Subject: [PATCH 04/20] keep anyways --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 19ea81916..ed7ccd4c4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,6 +39,7 @@ jobs: fi - name: Publish test coverage + if: ${{ !matrix.use-latest-deps }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file From 05571629a8c19aa353594f1a8c6dfc029aebcb8b Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 11:55:00 +0000 Subject: [PATCH 05/20] fix --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ed7ccd4c4..d13a2e04f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,9 +15,9 @@ jobs: strategy: fail-fast: false matrix: - use-latest-deps: - - true - - false + dep-type: + - latest + - frozen runs-on: ${{ inputs.os }} steps: - name: Checkout @@ -32,14 +32,14 @@ jobs: - name: Run tests run: | - if [ "${{ matrix.use-latest-deps }}" = "true" ]; then + if [ "${{ matrix.dep-type }}" = "latest" ]; then make dev-latest test else make dev test fi - name: Publish test coverage - if: ${{ !matrix.use-latest-deps }} + if: ${{ matrix.dep-type == 'frozen' }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file From 29f494d10f9c6bdfcd4a4b1fc31cda26b9fefa72 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 12:00:11 +0000 Subject: [PATCH 06/20] fix --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 92e2e6313..9cf9edc5e 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,7 +6,7 @@ # annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.5.2 # via # httpx # openai From c1d2aceca20c6b238568dcdfbe8e32803bfeb01a Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 12:58:33 +0000 Subject: [PATCH 07/20] fix --- .github/workflows/test.yml | 5 +- .gitignore | 5 +- Makefile | 22 +- requirements-dev-py310.txt | 276 ++++++++++++++++++ requirements-dev-py311.txt | 265 +++++++++++++++++ ...ents-dev.txt => requirements-dev-py312.txt | 6 +- requirements-dev-py38.txt | 271 +++++++++++++++++ requirements-dev-py39.txt | 276 ++++++++++++++++++ 8 files changed, 1112 insertions(+), 14 deletions(-) create mode 100644 requirements-dev-py310.txt create mode 100644 requirements-dev-py311.txt rename requirements-dev.txt => requirements-dev-py312.txt (96%) create mode 100644 requirements-dev-py38.txt create mode 100644 requirements-dev-py39.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d13a2e04f..35b0b438c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,11 +31,12 @@ jobs: python-version: ${{ inputs.pyVersion }} - name: Run tests + shell: bash run: | if [ "${{ matrix.dep-type }}" = "latest" ]; then - make dev-latest test + make dev-latest test PYTHON_VERSION=${{ inputs.pyVersion }} else - make dev test + make dev test PYTHON_VERSION=${{ inputs.pyVersion }} fi - name: Publish test coverage diff --git a/.gitignore b/.gitignore index ac1aa7945..0e22f8ec7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -.venv +.venv* *. build dist @@ -10,4 +10,5 @@ __pycache__ databricks-sdk-py.iml .databricks .coverage -htmlcov \ No newline at end of file +htmlcov +.python-version diff --git a/Makefile b/Makefile index 532b384fc..7a9266308 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,23 @@ +# Default Python version if not specified +# This is expected to have the form X.Y. +# The corresponding requirements file is requirements-dev-pyXY.txt. +PYTHON_VERSION ?= 3.13 + +# Generate requirements filename based on Python version +REQUIREMENTS_FILE = requirements-dev-py$(subst .,,$(PYTHON_VERSION)).txt + dev-env: - python3 -m venv .venv + python$(PYTHON_VERSION) -m venv .venv$(PYTHON_VERSION) ifeq ($(OS), Windows_NT) - .venv\Scripts\activate + .venv$(PYTHON_VERSION)\Scripts\activate else - . .venv/bin/activate + . .venv$(PYTHON_VERSION)/bin/activate endif dev: dev-env - # Install all dependencies from the requirements-dev.txt file - # Regenerate this file with `make update-dev-dep-lockfile` - pip install -r requirements-dev.txt + # Install all dependencies from the version-specific requirements file + # Regenerate this file with `make update-dev-dep-lockfile PYTHON_VERSION=X.Y` + pip install -r $(REQUIREMENTS_FILE) dev-latest: dev-env # Install all dependencies from the pyproject.toml file @@ -19,7 +27,7 @@ install-pip-tools: pip install pip-tools update-dev-dep-lockfile: install-pip-tools - pip-compile pyproject.toml --extra dev --output-file requirements-dev.txt + pip-compile pyproject.toml --extra dev --output-file $(REQUIREMENTS_FILE) install: pip install . diff --git a/requirements-dev-py310.txt b/requirements-dev-py310.txt new file mode 100644 index 000000000..bfe10bdcb --- /dev/null +++ b/requirements-dev-py310.txt @@ -0,0 +1,276 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py310.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.0 + # via pytest-cov +databricks-connect==16.1.6 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # ipython + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.73.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.73.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==8.37.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==1.26.4 + # via + # databricks-connect + # pandas +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # databricks-connect + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +pandas==2.3.0 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +protobuf==6.31.1 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.7 + # via databricks-connect +pyarrow==20.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +tzdata==2025.2 + # via pandas +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/requirements-dev-py311.txt b/requirements-dev-py311.txt new file mode 100644 index 000000000..1364c2bcb --- /dev/null +++ b/requirements-dev-py311.txt @@ -0,0 +1,265 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py311.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.0 + # via pytest-cov +databricks-connect==16.1.6 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.73.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.73.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==1.26.4 + # via + # databricks-connect + # pandas +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # databricks-connect + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +pandas==2.3.0 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +protobuf==6.31.1 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.7 + # via databricks-connect +pyarrow==20.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +tzdata==2025.2 + # via pandas +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/requirements-dev.txt b/requirements-dev-py312.txt similarity index 96% rename from requirements-dev.txt rename to requirements-dev-py312.txt index 9cf9edc5e..3ae04c0d2 100644 --- a/requirements-dev.txt +++ b/requirements-dev-py312.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --extra=dev --output-file=requirements-dev.txt pyproject.toml +# pip-compile --extra=dev --output-file=requirements-dev-py312.txt pyproject.toml # annotated-types==0.7.0 # via pydantic -anyio==4.5.2 +anyio==4.9.0 # via # httpx # openai @@ -124,7 +124,7 @@ packaging==24.2 # langsmith # pytest # pytest-rerunfailures -pandas==2.2.3 # rolled back from 2.3.0 because of https://github.com/pandas-dev/pandas/issues/61579 +pandas==2.3.0 # via databricks-connect parso==0.8.4 # via jedi diff --git a/requirements-dev-py38.txt b/requirements-dev-py38.txt new file mode 100644 index 000000000..f873875f0 --- /dev/null +++ b/requirements-dev-py38.txt @@ -0,0 +1,271 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py38.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.5.2 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +backcall==0.2.0 + # via ipython +black==24.8.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.1.8 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.6.1 + # via pytest-cov +databricks-connect==13.0.1 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.70.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +importlib-metadata==8.5.0 + # via build +iniconfig==2.1.0 + # via pytest +ipython==8.12.3 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==5.13.2 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.9.1 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.2.43 + # via langchain-openai +langchain-openai==0.1.25 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.1.147 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==1.24.4 + # via + # databricks-connect + # pandas + # pyarrow +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.15 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # pytest + # pytest-rerunfailures +pandas==2.0.3 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +pickleshare==0.7.5 + # via ipython +platformdirs==4.3.6 + # via black +pluggy==1.5.0 + # via pytest +prompt-toolkit==3.0.51 + # via ipython +protobuf==5.29.5 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.7 + # via databricks-connect +pyarrow==17.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.12.1 + # via databricks-sdk (pyproject.toml) +pydantic==2.10.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.27.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.2.0 + # via autoflake +pygments==2.19.1 + # via ipython +pyproject-hooks==1.2.0 + # via build +pytest==8.3.5 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==5.0.0 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==14.0 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.6.1 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==8.5.0 + # via langchain-core +tiktoken==0.7.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.13.2 + # via + # annotated-types + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core +tzdata==2025.2 + # via pandas +urllib3==2.2.3 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zipp==3.20.2 + # via importlib-metadata diff --git a/requirements-dev-py39.txt b/requirements-dev-py39.txt new file mode 100644 index 000000000..edfe870b1 --- /dev/null +++ b/requirements-dev-py39.txt @@ -0,0 +1,276 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py39.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.1.8 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.0 + # via pytest-cov +databricks-connect==13.3.7 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # ipython + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.73.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.73.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +importlib-metadata==8.7.0 + # via build +iniconfig==2.1.0 + # via pytest +ipython==8.18.1 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==1.26.4 + # via + # databricks-connect + # pandas +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +pandas==2.3.0 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +protobuf==6.31.1 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.7 + # via databricks-connect +pyarrow==20.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +tzdata==2025.2 + # via pandas +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zipp==3.23.0 + # via importlib-metadata +zstandard==0.23.0 + # via langsmith From 2ef029c7e791506654fa0fcf8e9d3c98aa3e0a81 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:05:17 +0000 Subject: [PATCH 08/20] fix python 3.9 --- requirements-dev-py39.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev-py39.txt b/requirements-dev-py39.txt index edfe870b1..e2fdcd81f 100644 --- a/requirements-dev-py39.txt +++ b/requirements-dev-py39.txt @@ -128,7 +128,7 @@ packaging==24.2 # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 +pandas==2.2.3 # rolled back from 2.3.0 because of https://github.com/pandas-dev/pandas/issues/61579 # via databricks-connect parso==0.8.4 # via jedi From d30079678f519282b2c239e634ed9ace6eb5ae92 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:05:51 +0000 Subject: [PATCH 09/20] fix --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7a9266308..dea6d7d49 100644 --- a/Makefile +++ b/Makefile @@ -2,12 +2,13 @@ # This is expected to have the form X.Y. # The corresponding requirements file is requirements-dev-pyXY.txt. PYTHON_VERSION ?= 3.13 +PYTHON_VERSION_NO_DOTS = $(subst .,,$(PYTHON_VERSION)) # Generate requirements filename based on Python version -REQUIREMENTS_FILE = requirements-dev-py$(subst .,,$(PYTHON_VERSION)).txt +REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION_NO_DOTS).txt dev-env: - python$(PYTHON_VERSION) -m venv .venv$(PYTHON_VERSION) + python$(PYTHON_VERSION) -m venv .venv$(PYTHON_VERSION_NO_DOTS) ifeq ($(OS), Windows_NT) .venv$(PYTHON_VERSION)\Scripts\activate else From d3eb89341bae5820f651714329586561891b3eee Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:07:23 +0000 Subject: [PATCH 10/20] fix --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index dea6d7d49..3303357d5 100644 --- a/Makefile +++ b/Makefile @@ -10,9 +10,9 @@ REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION_NO_DOTS).txt dev-env: python$(PYTHON_VERSION) -m venv .venv$(PYTHON_VERSION_NO_DOTS) ifeq ($(OS), Windows_NT) - .venv$(PYTHON_VERSION)\Scripts\activate + .venv$(PYTHON_VERSION_NO_DOTS)\Scripts\activate else - . .venv$(PYTHON_VERSION)/bin/activate + . .venv$(PYTHON_VERSION_NO_DOTS)/bin/activate endif dev: dev-env From eeea853c13106c71eaacb115c687c87e22176da1 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:10:18 +0000 Subject: [PATCH 11/20] fix windows --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3303357d5..023bb4aff 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ PYTHON_VERSION_NO_DOTS = $(subst .,,$(PYTHON_VERSION)) REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION_NO_DOTS).txt dev-env: - python$(PYTHON_VERSION) -m venv .venv$(PYTHON_VERSION_NO_DOTS) + python -m venv .venv$(PYTHON_VERSION_NO_DOTS) ifeq ($(OS), Windows_NT) .venv$(PYTHON_VERSION_NO_DOTS)\Scripts\activate else From 935ec41dbc736fce4dacfb19b531b1ef0c3d1f77 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:16:29 +0000 Subject: [PATCH 12/20] fix --- MANIFEST.in | 1 + Makefile | 6 + requirements-dev-py313.txt | 264 +++++++++++++++++++++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 requirements-dev-py313.txt diff --git a/MANIFEST.in b/MANIFEST.in index a6f944eed..591e2fa89 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,6 +16,7 @@ exclude NEXT_CHANGELOG.md exclude tagging.py exclude .package.json exclude .release_metadata.json +exclude requirements-dev-*.txt recursive-exclude docs * recursive-exclude examples * diff --git a/Makefile b/Makefile index 023bb4aff..4f1de0909 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,12 @@ PYTHON_VERSION_NO_DOTS = $(subst .,,$(PYTHON_VERSION)) # Generate requirements filename based on Python version REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION_NO_DOTS).txt +# A quick one-liner to update all environments using pyenv: +# for v in 3.8 3.9 3.10 3.11 3.12 3.13; do +# pyenv local $v +# make dev-env update-dev-dep-lockfile PYTHON_VERSION=$v +# done + dev-env: python -m venv .venv$(PYTHON_VERSION_NO_DOTS) ifeq ($(OS), Windows_NT) diff --git a/requirements-dev-py313.txt b/requirements-dev-py313.txt new file mode 100644 index 000000000..9aeb15560 --- /dev/null +++ b/requirements-dev-py313.txt @@ -0,0 +1,264 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py313.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +databricks-connect==17.0.0 + # via databricks-sdk (pyproject.toml) +databricks-sdk==0.57.0 + # via databricks-connect +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) +googleapis-common-protos==1.70.0 + # via + # databricks-connect + # grpcio-status +grpcio==1.73.0 + # via + # databricks-connect + # grpcio-status +grpcio-status==1.73.0 + # via databricks-connect +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +numpy==2.3.0 + # via + # databricks-connect + # pandas +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # databricks-connect + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +pandas==2.3.0 + # via databricks-connect +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +protobuf==6.31.1 + # via + # googleapis-common-protos + # grpcio-status +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +py4j==0.10.9.9 + # via databricks-connect +pyarrow==20.0.0 + # via databricks-connect +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +python-dateutil==2.9.0.post0 + # via pandas +pytz==2025.2 + # via pandas +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +six==1.17.0 + # via + # databricks-connect + # python-dateutil +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +tzdata==2025.2 + # via pandas +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith + +# The following packages are considered to be unsafe in a requirements file: +# setuptools From a985698085f2da50ed29869c99817ba387695a55 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:24:55 +0000 Subject: [PATCH 13/20] fix --- .github/workflows/test.yml | 4 ++-- Makefile | 34 ++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 35b0b438c..da0c1b8ac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,9 +34,9 @@ jobs: shell: bash run: | if [ "${{ matrix.dep-type }}" = "latest" ]; then - make dev-latest test PYTHON_VERSION=${{ inputs.pyVersion }} + make dev-latest test else - make dev test PYTHON_VERSION=${{ inputs.pyVersion }} + make dev test fi - name: Publish test coverage diff --git a/Makefile b/Makefile index 4f1de0909..ae0f2f2c3 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,34 @@ -# Default Python version if not specified -# This is expected to have the form X.Y. -# The corresponding requirements file is requirements-dev-pyXY.txt. -PYTHON_VERSION ?= 3.13 -PYTHON_VERSION_NO_DOTS = $(subst .,,$(PYTHON_VERSION)) +# Detect Python version from the system +PYTHON_VERSION := $(shell python3 -c 'import sys; print(f"{sys.version_info.major}{sys.version_info.minor}")') # Generate requirements filename based on Python version -REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION_NO_DOTS).txt - -# A quick one-liner to update all environments using pyenv: +REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION).txt + +# Testing workflow: +# 1. GitHub Actions runs tests for each Python version (3.8-3.12) on multiple OSes +# 2. For each Python version, tests run in two modes: +# - 'latest': Uses dependencies directly from pyproject.toml +# - 'frozen': Uses version-specific requirements-dev-pyXY.txt +# 3. Each Python version gets its own virtual environment (.venvXY) +# 4. Tests are only blocking in `frozen` mode. Tests run in `latest` mode are +# allowed to fail and serve as a warning that there may have been a breaking +# change in a dependency. +# 5. To run tests locally: +# - make dev test # uses frozen dependencies +# - make dev-latest test # uses latest dependencies +# +# To update all Python versions using pyenv: # for v in 3.8 3.9 3.10 3.11 3.12 3.13; do # pyenv local $v -# make dev-env update-dev-dep-lockfile PYTHON_VERSION=$v +# make dev-env update-dev-dep-lockfile # done dev-env: - python -m venv .venv$(PYTHON_VERSION_NO_DOTS) + python -m venv .venv$(PYTHON_VERSION) ifeq ($(OS), Windows_NT) - .venv$(PYTHON_VERSION_NO_DOTS)\Scripts\activate + .venv$(PYTHON_VERSION)\Scripts\activate else - . .venv$(PYTHON_VERSION_NO_DOTS)/bin/activate + . .venv$(PYTHON_VERSION)/bin/activate endif dev: dev-env From b945c5e5caaea934065e6e176d03d20cff9ca154 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 13:45:30 +0000 Subject: [PATCH 14/20] fix --- Makefile | 3 ++- pyproject.toml | 3 ++- requirements-dev-py310.txt | 49 ++----------------------------------- requirements-dev-py311.txt | 49 ++----------------------------------- requirements-dev-py312.txt | 49 ++----------------------------------- requirements-dev-py313.txt | 50 ++------------------------------------ requirements-dev-py38.txt | 44 +-------------------------------- requirements-dev-py39.txt | 45 ++-------------------------------- 8 files changed, 15 insertions(+), 277 deletions(-) diff --git a/Makefile b/Makefile index ae0f2f2c3..20141f661 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,8 @@ REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION).txt # - make dev test # uses frozen dependencies # - make dev-latest test # uses latest dependencies # -# To update all Python versions using pyenv: +# To update dependencies for all Python versions using pyenv: +# rm -rf .venv* requirements-dev-py*.txt # for v in 3.8 3.9 3.10 3.11 3.12 3.13; do # pyenv local $v # make dev-env update-dev-dep-lockfile diff --git a/pyproject.toml b/pyproject.toml index 60c33f0e6..465d4785c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,8 @@ dev = [ "ipywidgets", "requests-mock", "pyfakefs", - "databricks-connect", + # "databricks-connect", # For some tests, databricks-connect is installed dynamically. However, this creates + # a circular dependency because databricks-connect depends on this sdk. "pytest-rerunfailures", "openai", 'langchain-openai; python_version > "3.7"', diff --git a/requirements-dev-py310.txt b/requirements-dev-py310.txt index bfe10bdcb..bee9998ac 100644 --- a/requirements-dev-py310.txt +++ b/requirements-dev-py310.txt @@ -31,12 +31,8 @@ click==8.2.1 # via black comm==0.2.2 # via ipywidgets -coverage[toml]==7.9.0 +coverage[toml]==7.9.1 # via pytest-cov -databricks-connect==16.1.6 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -51,19 +47,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.73.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.73.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -108,10 +92,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==1.26.4 - # via - # databricks-connect - # pandas openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -122,13 +102,10 @@ packaging==24.2 # via # black # build - # databricks-connect # langchain-core # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -143,18 +120,10 @@ pluggy==1.6.0 # pytest-cov prompt-toolkit==3.0.51 # via ipython -protobuf==6.31.1 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.7 - # via databricks-connect -pyarrow==20.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -195,17 +164,12 @@ pytest-rerunfailures==15.1 # via databricks-sdk (pyproject.toml) pytest-xdist==3.7.0 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -217,10 +181,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -259,8 +219,6 @@ typing-extensions==4.14.0 # typing-inspection typing-inspection==0.4.1 # via pydantic -tzdata==2025.2 - # via pandas urllib3==2.4.0 # via requests wcwidth==0.2.13 @@ -271,6 +229,3 @@ widgetsnbextension==4.0.14 # via ipywidgets zstandard==0.23.0 # via langsmith - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements-dev-py311.txt b/requirements-dev-py311.txt index 1364c2bcb..74f5133bc 100644 --- a/requirements-dev-py311.txt +++ b/requirements-dev-py311.txt @@ -31,12 +31,8 @@ click==8.2.1 # via black comm==0.2.2 # via ipywidgets -coverage[toml]==7.9.0 +coverage[toml]==7.9.1 # via pytest-cov -databricks-connect==16.1.6 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -46,19 +42,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.73.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.73.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -105,10 +89,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==1.26.4 - # via - # databricks-connect - # pandas openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -119,13 +99,10 @@ packaging==24.2 # via # black # build - # databricks-connect # langchain-core # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -140,18 +117,10 @@ pluggy==1.6.0 # pytest-cov prompt-toolkit==3.0.51 # via ipython -protobuf==6.31.1 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.7 - # via databricks-connect -pyarrow==20.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -193,17 +162,12 @@ pytest-rerunfailures==15.1 # via databricks-sdk (pyproject.toml) pytest-xdist==3.7.0 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -215,10 +179,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -248,8 +208,6 @@ typing-extensions==4.14.0 # typing-inspection typing-inspection==0.4.1 # via pydantic -tzdata==2025.2 - # via pandas urllib3==2.4.0 # via requests wcwidth==0.2.13 @@ -260,6 +218,3 @@ widgetsnbextension==4.0.14 # via ipywidgets zstandard==0.23.0 # via langsmith - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements-dev-py312.txt b/requirements-dev-py312.txt index 3ae04c0d2..90eac2fa9 100644 --- a/requirements-dev-py312.txt +++ b/requirements-dev-py312.txt @@ -31,12 +31,8 @@ click==8.2.1 # via black comm==0.2.2 # via ipywidgets -coverage[toml]==7.9.0 +coverage[toml]==7.9.1 # via pytest-cov -databricks-connect==17.0.0 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -46,19 +42,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.73.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.73.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -105,10 +89,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==2.3.0 - # via - # databricks-connect - # pandas openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -119,13 +99,10 @@ packaging==24.2 # via # black # build - # databricks-connect # langchain-core # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -140,18 +117,10 @@ pluggy==1.6.0 # pytest-cov prompt-toolkit==3.0.51 # via ipython -protobuf==6.31.1 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.9 - # via databricks-connect -pyarrow==20.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -193,17 +162,12 @@ pytest-rerunfailures==15.1 # via databricks-sdk (pyproject.toml) pytest-xdist==3.7.0 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -215,10 +179,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -247,8 +207,6 @@ typing-extensions==4.14.0 # typing-inspection typing-inspection==0.4.1 # via pydantic -tzdata==2025.2 - # via pandas urllib3==2.4.0 # via requests wcwidth==0.2.13 @@ -259,6 +217,3 @@ widgetsnbextension==4.0.14 # via ipywidgets zstandard==0.23.0 # via langsmith - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements-dev-py313.txt b/requirements-dev-py313.txt index 9aeb15560..999a533d7 100644 --- a/requirements-dev-py313.txt +++ b/requirements-dev-py313.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.13 # by the following command: # # pip-compile --extra=dev --output-file=requirements-dev-py313.txt pyproject.toml @@ -33,10 +33,6 @@ comm==0.2.2 # via ipywidgets coverage[toml]==7.9.1 # via pytest-cov -databricks-connect==17.0.0 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -46,19 +42,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.73.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.73.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -105,10 +89,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==2.3.0 - # via - # databricks-connect - # pandas openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -119,13 +99,10 @@ packaging==24.2 # via # black # build - # databricks-connect # langchain-core # langsmith # pytest # pytest-rerunfailures -pandas==2.3.0 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -140,18 +117,10 @@ pluggy==1.6.0 # pytest-cov prompt-toolkit==3.0.51 # via ipython -protobuf==6.31.1 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.9 - # via databricks-connect -pyarrow==20.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -193,17 +162,12 @@ pytest-rerunfailures==15.1 # via databricks-sdk (pyproject.toml) pytest-xdist==3.7.0 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -215,10 +179,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -239,7 +199,6 @@ traitlets==5.14.3 # matplotlib-inline typing-extensions==4.14.0 # via - # anyio # langchain-core # openai # pydantic @@ -247,8 +206,6 @@ typing-extensions==4.14.0 # typing-inspection typing-inspection==0.4.1 # via pydantic -tzdata==2025.2 - # via pandas urllib3==2.4.0 # via requests wcwidth==0.2.13 @@ -259,6 +216,3 @@ widgetsnbextension==4.0.14 # via ipywidgets zstandard==0.23.0 # via langsmith - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/requirements-dev-py38.txt b/requirements-dev-py38.txt index f873875f0..a629ecaad 100644 --- a/requirements-dev-py38.txt +++ b/requirements-dev-py38.txt @@ -35,10 +35,6 @@ comm==0.2.2 # via ipywidgets coverage[toml]==7.6.1 # via pytest-cov -databricks-connect==13.0.1 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -52,19 +48,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.70.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -111,11 +95,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==1.24.4 - # via - # databricks-connect - # pandas - # pyarrow openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -129,8 +108,6 @@ packaging==24.2 # langchain-core # pytest # pytest-rerunfailures -pandas==2.0.3 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -145,18 +122,10 @@ pluggy==1.5.0 # via pytest prompt-toolkit==3.0.51 # via ipython -protobuf==5.29.5 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.7 - # via databricks-connect -pyarrow==17.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -195,17 +164,12 @@ pytest-rerunfailures==14.0 # via databricks-sdk (pyproject.toml) pytest-xdist==3.6.1 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -217,10 +181,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -257,8 +217,6 @@ typing-extensions==4.13.2 # openai # pydantic # pydantic-core -tzdata==2025.2 - # via pandas urllib3==2.2.3 # via requests wcwidth==0.2.13 diff --git a/requirements-dev-py39.txt b/requirements-dev-py39.txt index e2fdcd81f..49368a7d1 100644 --- a/requirements-dev-py39.txt +++ b/requirements-dev-py39.txt @@ -31,12 +31,8 @@ click==8.1.8 # via black comm==0.2.2 # via ipywidgets -coverage[toml]==7.9.0 +coverage[toml]==7.9.1 # via pytest-cov -databricks-connect==13.3.7 - # via databricks-sdk (pyproject.toml) -databricks-sdk==0.57.0 - # via databricks-connect decorator==5.2.1 # via ipython distro==1.9.0 @@ -51,19 +47,7 @@ execnet==2.1.1 executing==2.2.0 # via stack-data google-auth==2.40.3 - # via - # databricks-sdk - # databricks-sdk (pyproject.toml) -googleapis-common-protos==1.70.0 - # via - # databricks-connect - # grpcio-status -grpcio==1.73.0 - # via - # databricks-connect - # grpcio-status -grpcio-status==1.73.0 - # via databricks-connect + # via databricks-sdk (pyproject.toml) h11==0.16.0 # via httpcore httpcore==1.0.9 @@ -110,10 +94,6 @@ matplotlib-inline==0.1.7 # via ipython mypy-extensions==1.1.0 # via black -numpy==1.26.4 - # via - # databricks-connect - # pandas openai==1.86.0 # via # databricks-sdk (pyproject.toml) @@ -128,8 +108,6 @@ packaging==24.2 # langsmith # pytest # pytest-rerunfailures -pandas==2.2.3 # rolled back from 2.3.0 because of https://github.com/pandas-dev/pandas/issues/61579 - # via databricks-connect parso==0.8.4 # via jedi pathspec==0.12.1 @@ -144,18 +122,10 @@ pluggy==1.6.0 # pytest-cov prompt-toolkit==3.0.51 # via ipython -protobuf==6.31.1 - # via - # googleapis-common-protos - # grpcio-status ptyprocess==0.7.0 # via pexpect pure-eval==0.2.3 # via stack-data -py4j==0.10.9.7 - # via databricks-connect -pyarrow==20.0.0 - # via databricks-connect pyasn1==0.6.1 # via # pyasn1-modules @@ -196,17 +166,12 @@ pytest-rerunfailures==15.1 # via databricks-sdk (pyproject.toml) pytest-xdist==3.7.0 # via databricks-sdk (pyproject.toml) -python-dateutil==2.9.0.post0 - # via pandas -pytz==2025.2 - # via pandas pyyaml==6.0.2 # via langchain-core regex==2024.11.6 # via tiktoken requests==2.32.4 # via - # databricks-sdk # databricks-sdk (pyproject.toml) # langsmith # requests-mock @@ -218,10 +183,6 @@ requests-toolbelt==1.0.0 # via langsmith rsa==4.9.1 # via google-auth -six==1.17.0 - # via - # databricks-connect - # python-dateutil sniffio==1.3.1 # via # anyio @@ -260,8 +221,6 @@ typing-extensions==4.14.0 # typing-inspection typing-inspection==0.4.1 # via pydantic -tzdata==2025.2 - # via pandas urllib3==2.4.0 # via requests wcwidth==0.2.13 From 854712ab04f4bfab383475ee0b526e8acfb3842f Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 14:14:09 +0000 Subject: [PATCH 15/20] fix --- pyproject.toml | 2 - tests/integration/test_dbconnect.py | 73 ----------------------------- tests/integration/test_dbutils.py | 5 ++ 3 files changed, 5 insertions(+), 75 deletions(-) delete mode 100644 tests/integration/test_dbconnect.py diff --git a/pyproject.toml b/pyproject.toml index 465d4785c..f4fffe91d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,8 +47,6 @@ dev = [ "ipywidgets", "requests-mock", "pyfakefs", - # "databricks-connect", # For some tests, databricks-connect is installed dynamically. However, this creates - # a circular dependency because databricks-connect depends on this sdk. "pytest-rerunfailures", "openai", 'langchain-openai; python_version > "3.7"', diff --git a/tests/integration/test_dbconnect.py b/tests/integration/test_dbconnect.py deleted file mode 100644 index ecc82855b..000000000 --- a/tests/integration/test_dbconnect.py +++ /dev/null @@ -1,73 +0,0 @@ -import pytest - -DBCONNECT_DBR_CLIENT = { - "13.3": "13.3.3", - "14.3": "14.3.1", -} - - -def reload_modules(name: str): - """ - Reloads the specified module. This is useful when testing Databricks Connect, since both - the `databricks.connect` and `databricks.sdk.runtime` modules are stateful, and we need - to reload these modules to reset the state cache between test runs. - """ - - import importlib - import sys - - v = sys.modules.get(name) - if v is None: - return - try: - print(f"Reloading {name}") - importlib.reload(v) - except Exception as e: - print(f"Failed to reload {name}: {e}") - - -@pytest.fixture(params=list(DBCONNECT_DBR_CLIENT.keys())) -def setup_dbconnect_test(request, env_or_skip, restorable_env): - dbr = request.param - assert ( - dbr in DBCONNECT_DBR_CLIENT - ), f"Unsupported Databricks Runtime version {dbr}. Please update DBCONNECT_DBR_CLIENT." - - import os - - os.environ["DATABRICKS_CLUSTER_ID"] = env_or_skip(f"TEST_DBR_{dbr.replace('.', '_')}_DBCONNECT_CLUSTER_ID") - - import subprocess - import sys - - lib = f"databricks-connect=={DBCONNECT_DBR_CLIENT[dbr]}" - subprocess.check_call([sys.executable, "-m", "pip", "install", lib]) - - yield - - subprocess.check_call([sys.executable, "-m", "pip", "uninstall", "-y", "databricks-connect"]) - - -@pytest.mark.xdist_group(name="databricks-connect") -def test_dbconnect_initialisation(w, setup_dbconnect_test): - reload_modules("databricks.connect") - from databricks.connect import DatabricksSession - - spark = DatabricksSession.builder.getOrCreate() - assert spark.sql("SELECT 1").collect()[0][0] == 1 - - -@pytest.mark.xdist_group(name="databricks-connect") -def test_dbconnect_runtime_import(w, setup_dbconnect_test): - reload_modules("databricks.sdk.runtime") - from databricks.sdk.runtime import spark - - assert spark.sql("SELECT 1").collect()[0][0] == 1 - - -@pytest.mark.xdist_group(name="databricks-connect") -def test_dbconnect_runtime_import_no_error_if_doesnt_exist(w): - reload_modules("databricks.sdk.runtime") - from databricks.sdk.runtime import spark - - assert spark is None diff --git a/tests/integration/test_dbutils.py b/tests/integration/test_dbutils.py index feafac00a..5d007d26c 100644 --- a/tests/integration/test_dbutils.py +++ b/tests/integration/test_dbutils.py @@ -212,3 +212,8 @@ def test_secrets(w, random): assert all_secrets[key_for_string] == random_value assert all_secrets[key_for_bytes] == random_value + +def test_dbutils_spark_import_no_error_if_doesnt_exist(): + from databricks.sdk.runtime import spark + + assert spark is None From 8f9e7f8cb241c8963382c71f6c4476cc2f44462e Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Fri, 13 Jun 2025 14:16:05 +0000 Subject: [PATCH 16/20] revert --- .github/workflows/test.yml | 13 +- .gitignore | 5 +- MANIFEST.in | 1 - Makefile | 48 +------- requirements-dev-py310.txt | 231 ------------------------------------ requirements-dev-py311.txt | 220 ---------------------------------- requirements-dev-py312.txt | 219 ---------------------------------- requirements-dev-py313.txt | 218 ---------------------------------- requirements-dev-py38.txt | 229 ------------------------------------ requirements-dev-py39.txt | 235 ------------------------------------- 10 files changed, 7 insertions(+), 1412 deletions(-) delete mode 100644 requirements-dev-py310.txt delete mode 100644 requirements-dev-py311.txt delete mode 100644 requirements-dev-py312.txt delete mode 100644 requirements-dev-py313.txt delete mode 100644 requirements-dev-py38.txt delete mode 100644 requirements-dev-py39.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index da0c1b8ac..bb86e38a3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,10 +14,6 @@ jobs: test: strategy: fail-fast: false - matrix: - dep-type: - - latest - - frozen runs-on: ${{ inputs.os }} steps: - name: Checkout @@ -31,16 +27,9 @@ jobs: python-version: ${{ inputs.pyVersion }} - name: Run tests - shell: bash - run: | - if [ "${{ matrix.dep-type }}" = "latest" ]; then - make dev-latest test - else - make dev test - fi + run: make dev install test - name: Publish test coverage - if: ${{ matrix.dep-type == 'frozen' }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0e22f8ec7..ac1aa7945 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -.venv* +.venv *. build dist @@ -10,5 +10,4 @@ __pycache__ databricks-sdk-py.iml .databricks .coverage -htmlcov -.python-version +htmlcov \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in index 591e2fa89..a6f944eed 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,7 +16,6 @@ exclude NEXT_CHANGELOG.md exclude tagging.py exclude .package.json exclude .release_metadata.json -exclude requirements-dev-*.txt recursive-exclude docs * recursive-exclude examples * diff --git a/Makefile b/Makefile index 20141f661..c147f4074 100644 --- a/Makefile +++ b/Makefile @@ -1,52 +1,12 @@ -# Detect Python version from the system -PYTHON_VERSION := $(shell python3 -c 'import sys; print(f"{sys.version_info.major}{sys.version_info.minor}")') - -# Generate requirements filename based on Python version -REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION).txt - -# Testing workflow: -# 1. GitHub Actions runs tests for each Python version (3.8-3.12) on multiple OSes -# 2. For each Python version, tests run in two modes: -# - 'latest': Uses dependencies directly from pyproject.toml -# - 'frozen': Uses version-specific requirements-dev-pyXY.txt -# 3. Each Python version gets its own virtual environment (.venvXY) -# 4. Tests are only blocking in `frozen` mode. Tests run in `latest` mode are -# allowed to fail and serve as a warning that there may have been a breaking -# change in a dependency. -# 5. To run tests locally: -# - make dev test # uses frozen dependencies -# - make dev-latest test # uses latest dependencies -# -# To update dependencies for all Python versions using pyenv: -# rm -rf .venv* requirements-dev-py*.txt -# for v in 3.8 3.9 3.10 3.11 3.12 3.13; do -# pyenv local $v -# make dev-env update-dev-dep-lockfile -# done - -dev-env: - python -m venv .venv$(PYTHON_VERSION) +dev: + python3 -m venv .venv ifeq ($(OS), Windows_NT) - .venv$(PYTHON_VERSION)\Scripts\activate + .venv\Scripts\activate else - . .venv$(PYTHON_VERSION)/bin/activate + . .venv/bin/activate endif - -dev: dev-env - # Install all dependencies from the version-specific requirements file - # Regenerate this file with `make update-dev-dep-lockfile PYTHON_VERSION=X.Y` - pip install -r $(REQUIREMENTS_FILE) - -dev-latest: dev-env - # Install all dependencies from the pyproject.toml file pip install '.[dev]' -install-pip-tools: - pip install pip-tools - -update-dev-dep-lockfile: install-pip-tools - pip-compile pyproject.toml --extra dev --output-file $(REQUIREMENTS_FILE) - install: pip install . diff --git a/requirements-dev-py310.txt b/requirements-dev-py310.txt deleted file mode 100644 index bee9998ac..000000000 --- a/requirements-dev-py310.txt +++ /dev/null @@ -1,231 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py310.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -black==25.1.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.2.1 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.9.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -exceptiongroup==1.3.0 - # via - # anyio - # ipython - # pytest -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -iniconfig==2.1.0 - # via pytest -ipython==8.37.0 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==6.0.1 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.10.0 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.3.65 - # via langchain-openai -langchain-openai==0.3.22 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.3.45 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.18 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # langsmith - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -platformdirs==4.3.8 - # via black -pluggy==1.6.0 - # via - # pytest - # pytest-cov -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.13.0 - # via databricks-sdk (pyproject.toml) -pydantic==2.11.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.33.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.3.2 - # via autoflake -pygments==2.19.1 - # via - # ipython - # pytest -pyproject-hooks==1.2.0 - # via build -pytest==8.4.0 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==6.2.1 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==15.1 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.7.0 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==9.1.2 - # via langchain-core -tiktoken==0.9.0 - # via langchain-openai -tomli==2.2.1 - # via - # autoflake - # black - # build - # coverage - # pytest -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.14.0 - # via - # anyio - # black - # exceptiongroup - # ipython - # langchain-core - # openai - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.1 - # via pydantic -urllib3==2.4.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zstandard==0.23.0 - # via langsmith diff --git a/requirements-dev-py311.txt b/requirements-dev-py311.txt deleted file mode 100644 index 74f5133bc..000000000 --- a/requirements-dev-py311.txt +++ /dev/null @@ -1,220 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py311.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -black==25.1.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.2.1 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.9.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -iniconfig==2.1.0 - # via pytest -ipython==9.3.0 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipython-pygments-lexers==1.1.1 - # via ipython -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==6.0.1 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.10.0 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.3.65 - # via langchain-openai -langchain-openai==0.3.22 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.3.45 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.18 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # langsmith - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -platformdirs==4.3.8 - # via black -pluggy==1.6.0 - # via - # pytest - # pytest-cov -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.13.0 - # via databricks-sdk (pyproject.toml) -pydantic==2.11.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.33.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.3.2 - # via autoflake -pygments==2.19.1 - # via - # ipython - # ipython-pygments-lexers - # pytest -pyproject-hooks==1.2.0 - # via build -pytest==8.4.0 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==6.2.1 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==15.1 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.7.0 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==9.1.2 - # via langchain-core -tiktoken==0.9.0 - # via langchain-openai -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.14.0 - # via - # anyio - # ipython - # langchain-core - # openai - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.1 - # via pydantic -urllib3==2.4.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zstandard==0.23.0 - # via langsmith diff --git a/requirements-dev-py312.txt b/requirements-dev-py312.txt deleted file mode 100644 index 90eac2fa9..000000000 --- a/requirements-dev-py312.txt +++ /dev/null @@ -1,219 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py312.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -black==25.1.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.2.1 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.9.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -iniconfig==2.1.0 - # via pytest -ipython==9.3.0 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipython-pygments-lexers==1.1.1 - # via ipython -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==6.0.1 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.10.0 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.3.65 - # via langchain-openai -langchain-openai==0.3.22 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.3.45 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.18 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # langsmith - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -platformdirs==4.3.8 - # via black -pluggy==1.6.0 - # via - # pytest - # pytest-cov -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.13.0 - # via databricks-sdk (pyproject.toml) -pydantic==2.11.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.33.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.3.2 - # via autoflake -pygments==2.19.1 - # via - # ipython - # ipython-pygments-lexers - # pytest -pyproject-hooks==1.2.0 - # via build -pytest==8.4.0 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==6.2.1 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==15.1 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.7.0 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==9.1.2 - # via langchain-core -tiktoken==0.9.0 - # via langchain-openai -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.14.0 - # via - # anyio - # langchain-core - # openai - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.1 - # via pydantic -urllib3==2.4.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zstandard==0.23.0 - # via langsmith diff --git a/requirements-dev-py313.txt b/requirements-dev-py313.txt deleted file mode 100644 index 999a533d7..000000000 --- a/requirements-dev-py313.txt +++ /dev/null @@ -1,218 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py313.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -black==25.1.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.2.1 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.9.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -iniconfig==2.1.0 - # via pytest -ipython==9.3.0 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipython-pygments-lexers==1.1.1 - # via ipython -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==6.0.1 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.10.0 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.3.65 - # via langchain-openai -langchain-openai==0.3.22 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.3.45 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.18 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # langsmith - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -platformdirs==4.3.8 - # via black -pluggy==1.6.0 - # via - # pytest - # pytest-cov -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.13.0 - # via databricks-sdk (pyproject.toml) -pydantic==2.11.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.33.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.3.2 - # via autoflake -pygments==2.19.1 - # via - # ipython - # ipython-pygments-lexers - # pytest -pyproject-hooks==1.2.0 - # via build -pytest==8.4.0 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==6.2.1 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==15.1 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.7.0 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==9.1.2 - # via langchain-core -tiktoken==0.9.0 - # via langchain-openai -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.14.0 - # via - # langchain-core - # openai - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.1 - # via pydantic -urllib3==2.4.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zstandard==0.23.0 - # via langsmith diff --git a/requirements-dev-py38.txt b/requirements-dev-py38.txt deleted file mode 100644 index a629ecaad..000000000 --- a/requirements-dev-py38.txt +++ /dev/null @@ -1,229 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py38.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.5.2 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -backcall==0.2.0 - # via ipython -black==24.8.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.1.8 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.6.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -exceptiongroup==1.3.0 - # via - # anyio - # pytest -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -importlib-metadata==8.5.0 - # via build -iniconfig==2.1.0 - # via pytest -ipython==8.12.3 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==5.13.2 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.9.1 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.2.43 - # via langchain-openai -langchain-openai==0.1.25 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.1.147 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.15 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -pickleshare==0.7.5 - # via ipython -platformdirs==4.3.6 - # via black -pluggy==1.5.0 - # via pytest -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.12.1 - # via databricks-sdk (pyproject.toml) -pydantic==2.10.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.27.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.2.0 - # via autoflake -pygments==2.19.1 - # via ipython -pyproject-hooks==1.2.0 - # via build -pytest==8.3.5 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==5.0.0 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==14.0 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.6.1 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==8.5.0 - # via langchain-core -tiktoken==0.7.0 - # via langchain-openai -tomli==2.2.1 - # via - # autoflake - # black - # build - # coverage - # pytest -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.13.2 - # via - # annotated-types - # anyio - # black - # exceptiongroup - # ipython - # langchain-core - # openai - # pydantic - # pydantic-core -urllib3==2.2.3 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zipp==3.20.2 - # via importlib-metadata diff --git a/requirements-dev-py39.txt b/requirements-dev-py39.txt deleted file mode 100644 index 49368a7d1..000000000 --- a/requirements-dev-py39.txt +++ /dev/null @@ -1,235 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --extra=dev --output-file=requirements-dev-py39.txt pyproject.toml -# -annotated-types==0.7.0 - # via pydantic -anyio==4.9.0 - # via - # httpx - # openai -asttokens==3.0.0 - # via stack-data -autoflake==2.3.1 - # via databricks-sdk (pyproject.toml) -black==25.1.0 - # via databricks-sdk (pyproject.toml) -build==1.2.2.post1 - # via databricks-sdk (pyproject.toml) -cachetools==5.5.2 - # via google-auth -certifi==2025.4.26 - # via - # httpcore - # httpx - # requests -charset-normalizer==3.4.2 - # via requests -click==8.1.8 - # via black -comm==0.2.2 - # via ipywidgets -coverage[toml]==7.9.1 - # via pytest-cov -decorator==5.2.1 - # via ipython -distro==1.9.0 - # via openai -exceptiongroup==1.3.0 - # via - # anyio - # ipython - # pytest -execnet==2.1.1 - # via pytest-xdist -executing==2.2.0 - # via stack-data -google-auth==2.40.3 - # via databricks-sdk (pyproject.toml) -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # openai -idna==3.10 - # via - # anyio - # httpx - # requests -importlib-metadata==8.7.0 - # via build -iniconfig==2.1.0 - # via pytest -ipython==8.18.1 - # via - # databricks-sdk (pyproject.toml) - # ipywidgets -ipywidgets==8.1.7 - # via databricks-sdk (pyproject.toml) -isort==6.0.1 - # via databricks-sdk (pyproject.toml) -jedi==0.19.2 - # via ipython -jiter==0.10.0 - # via openai -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -jupyterlab-widgets==3.0.15 - # via ipywidgets -langchain-core==0.3.65 - # via langchain-openai -langchain-openai==0.3.22 ; python_version > "3.7" - # via databricks-sdk (pyproject.toml) -langsmith==0.3.45 - # via langchain-core -matplotlib-inline==0.1.7 - # via ipython -mypy-extensions==1.1.0 - # via black -openai==1.86.0 - # via - # databricks-sdk (pyproject.toml) - # langchain-openai -orjson==3.10.18 - # via langsmith -packaging==24.2 - # via - # black - # build - # langchain-core - # langsmith - # pytest - # pytest-rerunfailures -parso==0.8.4 - # via jedi -pathspec==0.12.1 - # via black -pexpect==4.9.0 - # via ipython -platformdirs==4.3.8 - # via black -pluggy==1.6.0 - # via - # pytest - # pytest-cov -prompt-toolkit==3.0.51 - # via ipython -ptyprocess==0.7.0 - # via pexpect -pure-eval==0.2.3 - # via stack-data -pyasn1==0.6.1 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.4.2 - # via google-auth -pycodestyle==2.13.0 - # via databricks-sdk (pyproject.toml) -pydantic==2.11.6 - # via - # langchain-core - # langsmith - # openai -pydantic-core==2.33.2 - # via pydantic -pyfakefs==5.8.0 - # via databricks-sdk (pyproject.toml) -pyflakes==3.3.2 - # via autoflake -pygments==2.19.1 - # via - # ipython - # pytest -pyproject-hooks==1.2.0 - # via build -pytest==8.4.0 - # via - # databricks-sdk (pyproject.toml) - # pytest-cov - # pytest-mock - # pytest-rerunfailures - # pytest-xdist -pytest-cov==6.2.1 - # via databricks-sdk (pyproject.toml) -pytest-mock==3.14.1 - # via databricks-sdk (pyproject.toml) -pytest-rerunfailures==15.1 - # via databricks-sdk (pyproject.toml) -pytest-xdist==3.7.0 - # via databricks-sdk (pyproject.toml) -pyyaml==6.0.2 - # via langchain-core -regex==2024.11.6 - # via tiktoken -requests==2.32.4 - # via - # databricks-sdk (pyproject.toml) - # langsmith - # requests-mock - # requests-toolbelt - # tiktoken -requests-mock==1.12.1 - # via databricks-sdk (pyproject.toml) -requests-toolbelt==1.0.0 - # via langsmith -rsa==4.9.1 - # via google-auth -sniffio==1.3.1 - # via - # anyio - # openai -stack-data==0.6.3 - # via ipython -tenacity==9.1.2 - # via langchain-core -tiktoken==0.9.0 - # via langchain-openai -tomli==2.2.1 - # via - # autoflake - # black - # build - # coverage - # pytest -tqdm==4.67.1 - # via openai -traitlets==5.14.3 - # via - # comm - # ipython - # ipywidgets - # matplotlib-inline -typing-extensions==4.14.0 - # via - # anyio - # black - # exceptiongroup - # ipython - # langchain-core - # openai - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.1 - # via pydantic -urllib3==2.4.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -wheel==0.45.1 - # via databricks-sdk (pyproject.toml) -widgetsnbextension==4.0.14 - # via ipywidgets -zipp==3.23.0 - # via importlib-metadata -zstandard==0.23.0 - # via langsmith From e910348fd396b681c228b14bed3d607cd493c77e Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Mon, 16 Jun 2025 09:56:25 +0000 Subject: [PATCH 17/20] Revert "revert" This reverts commit 8f9e7f8cb241c8963382c71f6c4476cc2f44462e. --- .github/workflows/test.yml | 13 +- .gitignore | 5 +- MANIFEST.in | 1 + Makefile | 48 +++++++- requirements-dev-py310.txt | 231 ++++++++++++++++++++++++++++++++++++ requirements-dev-py311.txt | 220 ++++++++++++++++++++++++++++++++++ requirements-dev-py312.txt | 219 ++++++++++++++++++++++++++++++++++ requirements-dev-py313.txt | 218 ++++++++++++++++++++++++++++++++++ requirements-dev-py38.txt | 229 ++++++++++++++++++++++++++++++++++++ requirements-dev-py39.txt | 235 +++++++++++++++++++++++++++++++++++++ 10 files changed, 1412 insertions(+), 7 deletions(-) create mode 100644 requirements-dev-py310.txt create mode 100644 requirements-dev-py311.txt create mode 100644 requirements-dev-py312.txt create mode 100644 requirements-dev-py313.txt create mode 100644 requirements-dev-py38.txt create mode 100644 requirements-dev-py39.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bb86e38a3..da0c1b8ac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,6 +14,10 @@ jobs: test: strategy: fail-fast: false + matrix: + dep-type: + - latest + - frozen runs-on: ${{ inputs.os }} steps: - name: Checkout @@ -27,9 +31,16 @@ jobs: python-version: ${{ inputs.pyVersion }} - name: Run tests - run: make dev install test + shell: bash + run: | + if [ "${{ matrix.dep-type }}" = "latest" ]; then + make dev-latest test + else + make dev test + fi - name: Publish test coverage + if: ${{ matrix.dep-type == 'frozen' }} uses: codecov/codecov-action@v4 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index ac1aa7945..0e22f8ec7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -.venv +.venv* *. build dist @@ -10,4 +10,5 @@ __pycache__ databricks-sdk-py.iml .databricks .coverage -htmlcov \ No newline at end of file +htmlcov +.python-version diff --git a/MANIFEST.in b/MANIFEST.in index a6f944eed..591e2fa89 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,6 +16,7 @@ exclude NEXT_CHANGELOG.md exclude tagging.py exclude .package.json exclude .release_metadata.json +exclude requirements-dev-*.txt recursive-exclude docs * recursive-exclude examples * diff --git a/Makefile b/Makefile index c147f4074..20141f661 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,52 @@ -dev: - python3 -m venv .venv +# Detect Python version from the system +PYTHON_VERSION := $(shell python3 -c 'import sys; print(f"{sys.version_info.major}{sys.version_info.minor}")') + +# Generate requirements filename based on Python version +REQUIREMENTS_FILE = requirements-dev-py$(PYTHON_VERSION).txt + +# Testing workflow: +# 1. GitHub Actions runs tests for each Python version (3.8-3.12) on multiple OSes +# 2. For each Python version, tests run in two modes: +# - 'latest': Uses dependencies directly from pyproject.toml +# - 'frozen': Uses version-specific requirements-dev-pyXY.txt +# 3. Each Python version gets its own virtual environment (.venvXY) +# 4. Tests are only blocking in `frozen` mode. Tests run in `latest` mode are +# allowed to fail and serve as a warning that there may have been a breaking +# change in a dependency. +# 5. To run tests locally: +# - make dev test # uses frozen dependencies +# - make dev-latest test # uses latest dependencies +# +# To update dependencies for all Python versions using pyenv: +# rm -rf .venv* requirements-dev-py*.txt +# for v in 3.8 3.9 3.10 3.11 3.12 3.13; do +# pyenv local $v +# make dev-env update-dev-dep-lockfile +# done + +dev-env: + python -m venv .venv$(PYTHON_VERSION) ifeq ($(OS), Windows_NT) - .venv\Scripts\activate + .venv$(PYTHON_VERSION)\Scripts\activate else - . .venv/bin/activate + . .venv$(PYTHON_VERSION)/bin/activate endif + +dev: dev-env + # Install all dependencies from the version-specific requirements file + # Regenerate this file with `make update-dev-dep-lockfile PYTHON_VERSION=X.Y` + pip install -r $(REQUIREMENTS_FILE) + +dev-latest: dev-env + # Install all dependencies from the pyproject.toml file pip install '.[dev]' +install-pip-tools: + pip install pip-tools + +update-dev-dep-lockfile: install-pip-tools + pip-compile pyproject.toml --extra dev --output-file $(REQUIREMENTS_FILE) + install: pip install . diff --git a/requirements-dev-py310.txt b/requirements-dev-py310.txt new file mode 100644 index 000000000..bee9998ac --- /dev/null +++ b/requirements-dev-py310.txt @@ -0,0 +1,231 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py310.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # ipython + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==8.37.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith diff --git a/requirements-dev-py311.txt b/requirements-dev-py311.txt new file mode 100644 index 000000000..74f5133bc --- /dev/null +++ b/requirements-dev-py311.txt @@ -0,0 +1,220 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py311.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith diff --git a/requirements-dev-py312.txt b/requirements-dev-py312.txt new file mode 100644 index 000000000..90eac2fa9 --- /dev/null +++ b/requirements-dev-py312.txt @@ -0,0 +1,219 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py312.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith diff --git a/requirements-dev-py313.txt b/requirements-dev-py313.txt new file mode 100644 index 000000000..999a533d7 --- /dev/null +++ b/requirements-dev-py313.txt @@ -0,0 +1,218 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py313.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.2.1 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +iniconfig==2.1.0 + # via pytest +ipython==9.3.0 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipython-pygments-lexers==1.1.1 + # via ipython +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # ipython-pygments-lexers + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zstandard==0.23.0 + # via langsmith diff --git a/requirements-dev-py38.txt b/requirements-dev-py38.txt new file mode 100644 index 000000000..a629ecaad --- /dev/null +++ b/requirements-dev-py38.txt @@ -0,0 +1,229 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py38.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.5.2 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +backcall==0.2.0 + # via ipython +black==24.8.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.1.8 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.6.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +importlib-metadata==8.5.0 + # via build +iniconfig==2.1.0 + # via pytest +ipython==8.12.3 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==5.13.2 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.9.1 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.2.43 + # via langchain-openai +langchain-openai==0.1.25 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.1.147 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.15 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +pickleshare==0.7.5 + # via ipython +platformdirs==4.3.6 + # via black +pluggy==1.5.0 + # via pytest +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.12.1 + # via databricks-sdk (pyproject.toml) +pydantic==2.10.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.27.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.2.0 + # via autoflake +pygments==2.19.1 + # via ipython +pyproject-hooks==1.2.0 + # via build +pytest==8.3.5 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==5.0.0 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==14.0 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.6.1 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==8.5.0 + # via langchain-core +tiktoken==0.7.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.13.2 + # via + # annotated-types + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core +urllib3==2.2.3 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zipp==3.20.2 + # via importlib-metadata diff --git a/requirements-dev-py39.txt b/requirements-dev-py39.txt new file mode 100644 index 000000000..49368a7d1 --- /dev/null +++ b/requirements-dev-py39.txt @@ -0,0 +1,235 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements-dev-py39.txt pyproject.toml +# +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # openai +asttokens==3.0.0 + # via stack-data +autoflake==2.3.1 + # via databricks-sdk (pyproject.toml) +black==25.1.0 + # via databricks-sdk (pyproject.toml) +build==1.2.2.post1 + # via databricks-sdk (pyproject.toml) +cachetools==5.5.2 + # via google-auth +certifi==2025.4.26 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.4.2 + # via requests +click==8.1.8 + # via black +comm==0.2.2 + # via ipywidgets +coverage[toml]==7.9.1 + # via pytest-cov +decorator==5.2.1 + # via ipython +distro==1.9.0 + # via openai +exceptiongroup==1.3.0 + # via + # anyio + # ipython + # pytest +execnet==2.1.1 + # via pytest-xdist +executing==2.2.0 + # via stack-data +google-auth==2.40.3 + # via databricks-sdk (pyproject.toml) +h11==0.16.0 + # via httpcore +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # openai +idna==3.10 + # via + # anyio + # httpx + # requests +importlib-metadata==8.7.0 + # via build +iniconfig==2.1.0 + # via pytest +ipython==8.18.1 + # via + # databricks-sdk (pyproject.toml) + # ipywidgets +ipywidgets==8.1.7 + # via databricks-sdk (pyproject.toml) +isort==6.0.1 + # via databricks-sdk (pyproject.toml) +jedi==0.19.2 + # via ipython +jiter==0.10.0 + # via openai +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +jupyterlab-widgets==3.0.15 + # via ipywidgets +langchain-core==0.3.65 + # via langchain-openai +langchain-openai==0.3.22 ; python_version > "3.7" + # via databricks-sdk (pyproject.toml) +langsmith==0.3.45 + # via langchain-core +matplotlib-inline==0.1.7 + # via ipython +mypy-extensions==1.1.0 + # via black +openai==1.86.0 + # via + # databricks-sdk (pyproject.toml) + # langchain-openai +orjson==3.10.18 + # via langsmith +packaging==24.2 + # via + # black + # build + # langchain-core + # langsmith + # pytest + # pytest-rerunfailures +parso==0.8.4 + # via jedi +pathspec==0.12.1 + # via black +pexpect==4.9.0 + # via ipython +platformdirs==4.3.8 + # via black +pluggy==1.6.0 + # via + # pytest + # pytest-cov +prompt-toolkit==3.0.51 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.3 + # via stack-data +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycodestyle==2.13.0 + # via databricks-sdk (pyproject.toml) +pydantic==2.11.6 + # via + # langchain-core + # langsmith + # openai +pydantic-core==2.33.2 + # via pydantic +pyfakefs==5.8.0 + # via databricks-sdk (pyproject.toml) +pyflakes==3.3.2 + # via autoflake +pygments==2.19.1 + # via + # ipython + # pytest +pyproject-hooks==1.2.0 + # via build +pytest==8.4.0 + # via + # databricks-sdk (pyproject.toml) + # pytest-cov + # pytest-mock + # pytest-rerunfailures + # pytest-xdist +pytest-cov==6.2.1 + # via databricks-sdk (pyproject.toml) +pytest-mock==3.14.1 + # via databricks-sdk (pyproject.toml) +pytest-rerunfailures==15.1 + # via databricks-sdk (pyproject.toml) +pytest-xdist==3.7.0 + # via databricks-sdk (pyproject.toml) +pyyaml==6.0.2 + # via langchain-core +regex==2024.11.6 + # via tiktoken +requests==2.32.4 + # via + # databricks-sdk (pyproject.toml) + # langsmith + # requests-mock + # requests-toolbelt + # tiktoken +requests-mock==1.12.1 + # via databricks-sdk (pyproject.toml) +requests-toolbelt==1.0.0 + # via langsmith +rsa==4.9.1 + # via google-auth +sniffio==1.3.1 + # via + # anyio + # openai +stack-data==0.6.3 + # via ipython +tenacity==9.1.2 + # via langchain-core +tiktoken==0.9.0 + # via langchain-openai +tomli==2.2.1 + # via + # autoflake + # black + # build + # coverage + # pytest +tqdm==4.67.1 + # via openai +traitlets==5.14.3 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +typing-extensions==4.14.0 + # via + # anyio + # black + # exceptiongroup + # ipython + # langchain-core + # openai + # pydantic + # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic +urllib3==2.4.0 + # via requests +wcwidth==0.2.13 + # via prompt-toolkit +wheel==0.45.1 + # via databricks-sdk (pyproject.toml) +widgetsnbextension==4.0.14 + # via ipywidgets +zipp==3.23.0 + # via importlib-metadata +zstandard==0.23.0 + # via langsmith From 1abc7cdedb951765248859e2a35b03b3a717717f Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Mon, 16 Jun 2025 09:57:35 +0000 Subject: [PATCH 18/20] fix fmt --- tests/integration/test_dbutils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/test_dbutils.py b/tests/integration/test_dbutils.py index 5d007d26c..fbc4d152c 100644 --- a/tests/integration/test_dbutils.py +++ b/tests/integration/test_dbutils.py @@ -213,6 +213,7 @@ def test_secrets(w, random): assert all_secrets[key_for_string] == random_value assert all_secrets[key_for_bytes] == random_value + def test_dbutils_spark_import_no_error_if_doesnt_exist(): from databricks.sdk.runtime import spark From 5a1b1e77789a9949bdbc492dba1d6aada8b46822 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Mon, 16 Jun 2025 10:11:02 +0000 Subject: [PATCH 19/20] all tests/integration tests are integration tests only --- tests/integration/conftest.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 55114bd84..203913dd6 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -38,13 +38,9 @@ def pytest_configure(config): def pytest_collection_modifyitems(items): - # safer to refer to fixture fns instead of strings - client_fixtures = [x.__name__ for x in [a, w, ucws, ucacct]] + # All tests defined in tests/integration are considered integration tests. for item in items: - current_fixtures = getattr(item, "fixturenames", ()) - for requires_client in client_fixtures: - if requires_client in current_fixtures: - item.add_marker("integration") + item.add_marker("integration") @pytest.fixture(scope="session") From 4933e6544053826752b10dd60a51ee143f094238 Mon Sep 17 00:00:00 2001 From: Miles Yucht Date: Mon, 16 Jun 2025 10:20:38 +0000 Subject: [PATCH 20/20] integration tests are dependent on directory alone --- tests/integration/conftest.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 203913dd6..0c936f2b5 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -40,7 +40,9 @@ def pytest_configure(config): def pytest_collection_modifyitems(items): # All tests defined in tests/integration are considered integration tests. for item in items: - item.add_marker("integration") + directory = item.path.parent + if directory.name == "integration" and directory.parent.name == "tests": + item.add_marker("integration") @pytest.fixture(scope="session")