-
Notifications
You must be signed in to change notification settings - Fork 148
Expand file tree
/
Copy pathpyproject.toml
More file actions
146 lines (134 loc) · 5.84 KB
/
Copy pathpyproject.toml
File metadata and controls
146 lines (134 loc) · 5.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
[tool.poetry]
name = "databricks-sql-connector"
version = "4.4.0"
description = "Databricks SQL Connector for Python"
authors = ["Databricks <databricks-sql-connector-maintainers@databricks.com>"]
license = "Apache-2.0"
readme = "README.md"
packages = [{ include = "databricks", from = "src" }]
include = ["CHANGELOG.md"]
[tool.poetry.dependencies]
python = "^3.10"
# Floor is 0.24.0 -- the first release that both clears the open Apache Thrift
# CVEs (CVE-2025-48431 + the CVE-2026-41602..41636 set, all fixed in 0.23.0)
# AND is safe to install on DBR LTS. History: 0.23.0 fixed the CVEs but ships
# sdist-only and its setup.py calls sys.exit(0) on the build-success path,
# killing the PEP 517 backend on the OLD setuptools bundled by DBR LTS -- the
# SEV0 ES-1960554 (4.2.7 widened to <0.24.0 and was yanked; PR #840), which is
# why we held at ~=0.22.0. thrift 0.24.0 (THRIFT-6067) resolves this: it ships
# prebuilt manylinux2014 wheels (cp310-cp314) + macOS/musl/Windows, so pip uses
# a wheel and never runs setup.py on DBR LTS -- the build-time break cannot
# trigger. The `DBR LTS Install` CI check (.github/workflows/dbr-lts-install.yml)
# installs the built artifact on real DBR LTS clusters and is the authoritative
# gate for this. Cap at <0.25.0: thrift is pre-1.0, each 0.x minor can carry
# breaking changes or packaging regressions (see 0.23.0), so bump this
# deliberately once a new minor ships and the DBR-LTS gate proves it safe.
thrift = "~=0.24.0"
pandas = [
{ version = ">=1.2.5,<4.0.0", python = ">=3.10,<3.13" },
{ version = ">=2.2.3,<4.0.0", python = ">=3.13" }
]
lz4 = [
{ version = "^4.0.2", python = ">=3.10,<3.14" },
{ version = "^4.4.5", python = ">=3.14" }
]
requests = "^2.18.1"
oauthlib = "^3.1.0"
openpyxl = "^3.0.10"
urllib3 = ">=1.26"
python-dateutil = "^2.8.0"
pyarrow = [
{ version = ">=14.0.1", python = ">=3.10,<3.13", optional=true },
{ version = ">=18.0.0", python = ">=3.13,<3.14", optional=true },
{ version = ">=22.0.0", python = ">=3.14", optional=true }
]
pyjwt = "^2.0.0"
pybreaker = "^1.0.0"
requests-kerberos = {version = "^0.15.0", optional = true}
# Optional Rust kernel backend for ``use_kernel=True`` (PyO3 wheel).
# Pulled in only via the ``[kernel]`` extra below. The published wheel
# is ``abi3`` with ``Requires-Python: >=3.10`` (built ``abi3-py310``),
# so the dependency is gated to Python >= 3.10: on 3.8/3.9 the
# ``[kernel]`` extra resolves to nothing and ``use_kernel=True`` raises
# a clear ImportError at runtime (see backend/kernel/_errors.py).
#
# Floor is 0.2.0 (``^0.2.0`` == ``>=0.2.0,<0.3.0``). The kernel is
# pre-1.0, so each 0.x minor may carry breaking changes — the ``<0.3.0``
# cap means we bump this deliberately when the kernel ships 0.3.0 rather
# than letting a potentially-breaking minor flow in automatically. 0.2.0
# keeps the same Requires-Python (>=3.10) and pyarrow (>=23.0.1,<24) pin
# as 0.1.x, so the gating below is unchanged.
databricks-sql-kernel = {version = "^0.2.0", optional = true, python = ">=3.10"}
[tool.poetry.extras]
pyarrow = ["pyarrow"]
# ``pip install databricks-sql-connector[kernel]`` adds the Rust kernel
# backend so ``use_kernel=True`` works. No-op on Python < 3.10 (the
# wheel's floor) — those users get a runtime ImportError if they pass
# ``use_kernel=True``.
#
# The kernel result path (``backend/kernel/result_set.py``) needs
# pyarrow, but it is NOT listed in this extra on purpose: the published
# kernel wheel declares ``pyarrow>=23.0.1,<24`` as a hard runtime
# dependency, so ``pip install ...[kernel]`` already pulls a compatible
# pyarrow transitively. Listing bare ``pyarrow`` here additionally
# forces poetry to co-resolve an unconstrained pyarrow against the
# kernel's ``>=23.0.1,<24`` (which itself requires Python >=3.10) across
# the connector's full 3.8–3.14 support matrix, which is unsatisfiable
# on 3.8/3.9 and breaks ``poetry lock``. The kernel's own dependency
# metadata is the single source of truth for the pyarrow floor.
kernel = ["databricks-sql-kernel"]
[tool.poetry.group.dev.dependencies]
pytest = "^9.0.3"
mypy = "^1.10.1"
pylint = ">=2.12.0"
black = "^26.3.1"
pytest-dotenv = "^0.5.2"
pytest-cov = "^4.0.0"
pytest-xdist = "^3.0.0"
# tests/unit/test_parameters.py imports pytz directly. It used to arrive
# transitively via pandas, but pandas 3.0 (resolved on Python >=3.11)
# dropped pytz as a required dependency -- it is now only a pandas extra.
# Declare it explicitly here so the test suite does not depend on pandas's
# transitive graph, which differs across the Python matrix.
pytz = ">=2020.1"
numpy = [
{ version = ">=1.16.6", python = ">=3.10,<3.11" },
{ version = ">=1.23.4", python = ">=3.11" },
]
[tool.poetry.urls]
"Homepage" = "https://github.com/databricks/databricks-sql-python"
"Bug Tracker" = "https://github.com/databricks/databricks-sql-python/issues"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.mypy]
ignore_missing_imports = "true"
exclude = ['ttypes\.py$', 'TCLIService\.py$']
[tool.black]
exclude = '/(\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|\.svn|_build|buck-out|build|dist|thrift_api)/'
[tool.pytest.ini_options]
markers = [
"reviewed: Test case has been reviewed by Databricks",
"serial: Tests that must run serially (not parallelized)",
"realkernel: Requires the real databricks-sql-kernel wheel and an unpolluted sys.modules (no fake kernel stub); must run in a separate pytest invocation from tests that fake databricks_sql_kernel (deselect with -m 'not realkernel', run alone with -m realkernel).",
]
minversion = "6.0"
log_cli = "false"
log_cli_level = "INFO"
testpaths = ["tests"]
env_files = ["test.env"]
[tool.coverage.run]
source = ["src"]
branch = true
omit = [
"*/tests/*",
"*/test_*",
"*/__pycache__/*",
"*/thrift_api/*",
]
[tool.coverage.report]
precision = 2
show_missing = true
skip_covered = false
[tool.coverage.xml]
output = "coverage.xml"