hotdata-framework 0.14.0__tar.gz → 0.14.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/workflows/check-release.yml +2 -2
  2. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/workflows/ci.yml +2 -2
  3. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/workflows/publish.yml +3 -3
  4. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/workflows/release.yml +3 -3
  5. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/CHANGELOG.md +7 -0
  6. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/PKG-INFO +2 -2
  7. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/pyproject.toml +2 -2
  8. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/scripts/release.sh +21 -7
  9. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/uv.lock +11 -11
  10. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/CODEOWNERS +0 -0
  11. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/dependabot.yml +0 -0
  12. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.github/workflows/dependabot-automerge.yml +0 -0
  13. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/.gitignore +0 -0
  14. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/CONTRACT.md +0 -0
  15. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/README.md +0 -0
  16. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/RELEASING.md +0 -0
  17. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/examples/basic_usage.py +0 -0
  18. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/__init__.py +0 -0
  19. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/client.py +0 -0
  20. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/databases.py +0 -0
  21. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/env.py +0 -0
  22. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/errors.py +0 -0
  23. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/health.py +0 -0
  24. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/managed_client.py +0 -0
  25. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/py.typed +0 -0
  26. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/hotdata_framework/result.py +0 -0
  27. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/scripts/check-release.py +0 -0
  28. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/scripts/extract-changelog.py +0 -0
  29. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/scripts/publish-workflow.sh +0 -0
  30. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/scripts/update_changelog.py +0 -0
  31. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_client.py +0 -0
  32. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_contract.py +0 -0
  33. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_databases.py +0 -0
  34. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_errors.py +0 -0
  35. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_health.py +0 -0
  36. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_indexes.py +0 -0
  37. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_managed_client.py +0 -0
  38. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_request_timeout.py +0 -0
  39. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_result.py +0 -0
  40. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_retry_policy.py +0 -0
  41. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_update_changelog.py +0 -0
  42. {hotdata_framework-0.14.0 → hotdata_framework-0.14.1}/tests/test_version.py +0 -0
@@ -14,11 +14,11 @@ jobs:
14
14
  name: Verify changelog matches version bump
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
17
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
18
18
  with:
19
19
  fetch-depth: 0
20
20
 
21
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
21
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
22
22
  with:
23
23
  python-version: '3.12'
24
24
 
@@ -17,9 +17,9 @@ jobs:
17
17
  name: Test (Python 3.12)
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
21
21
 
22
- - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v6
22
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v6
23
23
  with:
24
24
  enable-cache: true
25
25
 
@@ -46,11 +46,11 @@ jobs:
46
46
  exit 1
47
47
  fi
48
48
 
49
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
50
50
  with:
51
51
  ref: ${{ inputs.tag || github.ref_name }}
52
52
 
53
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
53
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
54
54
  with:
55
55
  python-version: '3.12'
56
56
 
@@ -91,7 +91,7 @@ jobs:
91
91
  permissions:
92
92
  id-token: write
93
93
  steps:
94
- - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
94
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
95
95
  with:
96
96
  name: dist
97
97
  path: dist/
@@ -43,11 +43,11 @@ jobs:
43
43
  exit 1
44
44
  fi
45
45
 
46
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
46
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
47
47
  with:
48
48
  ref: ${{ inputs.tag || github.ref_name }}
49
49
 
50
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
50
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v6
51
51
  with:
52
52
  python-version: '3.12'
53
53
 
@@ -77,7 +77,7 @@ jobs:
77
77
  } >> "$GITHUB_OUTPUT"
78
78
 
79
79
  - name: Create GitHub Release
80
- uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
80
+ uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
81
81
  with:
82
82
  tag_name: ${{ inputs.tag || github.ref_name }}
83
83
  name: ${{ steps.meta.outputs.name }} ${{ steps.meta.outputs.version }}
@@ -8,6 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  ## [Unreleased]
9
9
 
10
10
 
11
+
12
+ ## [0.14.1] - 2026-10-01
13
+
14
+ ### Changed
15
+
16
+ - Allow `hotdata>=0.9.0,<0.12` (was `<0.10`).
17
+
11
18
  ## [0.14.0] - 2026-09-01
12
19
 
13
20
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: hotdata-framework
3
- Version: 0.14.0
3
+ Version: 0.14.1
4
4
  Summary: Python framework for building Hotdata integrations: workspace runtime, query execution, and managed databases
5
5
  Project-URL: Homepage, https://www.hotdata.dev
6
6
  Project-URL: Documentation, https://www.hotdata.dev/docs
@@ -21,7 +21,7 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
21
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
22
  Classifier: Typing :: Typed
23
23
  Requires-Python: >=3.10
24
- Requires-Dist: hotdata<0.10,>=0.9.0
24
+ Requires-Dist: hotdata<0.12,>=0.9.0
25
25
  Requires-Dist: pandas>=2.0
26
26
  Requires-Dist: pyarrow>=14.0
27
27
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hotdata-framework"
7
- version = "0.14.0"
7
+ version = "0.14.1"
8
8
  description = "Python framework for building Hotdata integrations: workspace runtime, query execution, and managed databases"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -37,7 +37,7 @@ dependencies = [
37
37
  # uncapped floor turns someone else's release into a break in ours,
38
38
  # with no commit of our own to point at. Raise the cap deliberately, after
39
39
  # running the suite against the new minor.
40
- "hotdata>=0.9.0,<0.10",
40
+ "hotdata>=0.9.0,<0.12",
41
41
  "pandas>=2.0",
42
42
  "pyarrow>=14.0",
43
43
  ]
@@ -5,6 +5,11 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
5
  cd "$ROOT"
6
6
 
7
7
  die() { echo "error: $*" >&2; exit 1; }
8
+
9
+ # The one definition of an explicit version, shared by the argument check and
10
+ # the branch that takes the argument verbatim, so the two cannot drift apart.
11
+ readonly VERSION_RE='^[0-9]+\.[0-9]+\.[0-9]+$'
12
+ readonly BUMP_KIND_RE='^(patch|minor|major)$'
8
13
  need() { command -v "$1" >/dev/null 2>&1 || die "$1 is required"; }
9
14
 
10
15
  # An interpreter that can `import tomllib`, which is stdlib only from 3.11.
@@ -134,25 +139,34 @@ update_changelog() {
134
139
  cmd_prepare() {
135
140
  local bump="${1:-}"
136
141
  [[ -n "$bump" ]] || { usage; die "missing bump kind or explicit version"; }
142
+ # Check the argument before any branch switch below, so a typo exits without
143
+ # moving the caller off the branch they invoked from. Failures that depend on
144
+ # the base branch's version — an unchanged version, a pre-release suffix —
145
+ # can only be found after the checkout.
146
+ [[ "$bump" =~ $BUMP_KIND_RE || "$bump" =~ $VERSION_RE ]] \
147
+ || { usage; die "unknown bump kind: $bump"; }
137
148
  need gh
138
149
  PY_BIN="$(resolve_python)"
139
150
  ensure_clean
140
151
 
141
152
  local current new base branch pkg
153
+ base="$(default_branch)"
154
+ git fetch origin "$base"
155
+ git checkout "$base"
156
+ git pull --ff-only origin "$base"
157
+ ensure_clean
158
+
159
+ # Read the version from the base branch, not from whatever branch the script
160
+ # was invoked on. The bump is computed from it, so reading it first numbers
161
+ # the release off unrelated history.
142
162
  current="$(get_version)"
143
- if [[ "$bump" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
163
+ if [[ "$bump" =~ $VERSION_RE ]]; then
144
164
  new="$bump"
145
165
  else
146
166
  new="$(bump_version "$bump" "$current")"
147
167
  fi
148
168
  [[ "$new" != "$current" ]] || die "new version ($new) equals current ($current)"
149
169
 
150
- base="$(default_branch)"
151
- git fetch origin "$base"
152
- git checkout "$base"
153
- git pull --ff-only origin "$base"
154
- ensure_clean
155
-
156
170
  set_version "$new"
157
171
  update_changelog "$new"
158
172
  if command -v uv >/dev/null 2>&1 && [[ -f uv.lock ]]; then
@@ -3,10 +3,10 @@ revision = 3
3
3
  requires-python = ">=3.10"
4
4
  resolution-markers = [
5
5
  "python_full_version >= '3.15' and sys_platform == 'win32'",
6
- "python_full_version == '3.14.*' and sys_platform == 'win32'",
7
6
  "python_full_version >= '3.15' and sys_platform == 'emscripten'",
8
- "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
9
7
  "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
8
+ "python_full_version == '3.14.*' and sys_platform == 'win32'",
9
+ "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
10
10
  "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
11
11
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'",
12
12
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'",
@@ -86,7 +86,7 @@ wheels = [
86
86
 
87
87
  [[package]]
88
88
  name = "hotdata"
89
- version = "0.9.0"
89
+ version = "0.11.0"
90
90
  source = { registry = "https://pypi.org/simple" }
91
91
  dependencies = [
92
92
  { name = "pydantic" },
@@ -94,14 +94,14 @@ dependencies = [
94
94
  { name = "typing-extensions" },
95
95
  { name = "urllib3" },
96
96
  ]
97
- sdist = { url = "https://files.pythonhosted.org/packages/6e/db/91d0e8f8a8bfc9a76b588c8dc2ecb054d3e70ebf2ee7a70cd6e4a99a7dec/hotdata-0.9.0.tar.gz", hash = "sha256:35e4a569b7223e025c26b0d3299c8b4cd493276f32826682de6df9e583cea4ef", size = 217368, upload-time = "2026-08-11T14:09:08.166Z" }
97
+ sdist = { url = "https://files.pythonhosted.org/packages/1d/10/1a21c58de1fee8c63bf983db9531704e9b0611c63fd7a849a9ffdf9cc8c7/hotdata-0.11.0.tar.gz", hash = "sha256:a0e9fd242baa51b9350a969222319bcdf2c6ede1cf2e8a99e3f81d608af7b6fc", size = 207167, upload-time = "2026-09-18T20:58:41.802Z" }
98
98
  wheels = [
99
- { url = "https://files.pythonhosted.org/packages/ec/48/9b2f5cbbcc92e6dc06a6980fcf4413b83484af302a78263381a22236c308/hotdata-0.9.0-py3-none-any.whl", hash = "sha256:9d942a0d78979552ad641419e5706c9703d5165db0cf3497ae49344cd032e635", size = 316070, upload-time = "2026-08-11T14:09:06.589Z" },
99
+ { url = "https://files.pythonhosted.org/packages/ac/a4/cc71105c5971d29b40cfff76ab592fed95e1d433903631f9d2fccede50a4/hotdata-0.11.0-py3-none-any.whl", hash = "sha256:4ece2f43bac9a4f43ad32c305aa93042aa4a4f68a5bbdec4f2c6ae0b29f591d6", size = 292742, upload-time = "2026-09-18T20:58:40.049Z" },
100
100
  ]
101
101
 
102
102
  [[package]]
103
103
  name = "hotdata-framework"
104
- version = "0.14.0"
104
+ version = "0.14.1"
105
105
  source = { editable = "." }
106
106
  dependencies = [
107
107
  { name = "hotdata" },
@@ -120,7 +120,7 @@ dev = [
120
120
 
121
121
  [package.metadata]
122
122
  requires-dist = [
123
- { name = "hotdata", specifier = ">=0.9.0,<0.10" },
123
+ { name = "hotdata", specifier = ">=0.9.0,<0.12" },
124
124
  { name = "pandas", specifier = ">=2.0" },
125
125
  { name = "pyarrow", specifier = ">=14.0" },
126
126
  ]
@@ -366,10 +366,10 @@ version = "2.4.4"
366
366
  source = { registry = "https://pypi.org/simple" }
367
367
  resolution-markers = [
368
368
  "python_full_version >= '3.15' and sys_platform == 'win32'",
369
- "python_full_version == '3.14.*' and sys_platform == 'win32'",
370
369
  "python_full_version >= '3.15' and sys_platform == 'emscripten'",
371
- "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
372
370
  "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
371
+ "python_full_version == '3.14.*' and sys_platform == 'win32'",
372
+ "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
373
373
  "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
374
374
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'",
375
375
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'",
@@ -529,10 +529,10 @@ version = "3.0.3"
529
529
  source = { registry = "https://pypi.org/simple" }
530
530
  resolution-markers = [
531
531
  "python_full_version >= '3.15' and sys_platform == 'win32'",
532
- "python_full_version == '3.14.*' and sys_platform == 'win32'",
533
532
  "python_full_version >= '3.15' and sys_platform == 'emscripten'",
534
- "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
535
533
  "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'",
534
+ "python_full_version == '3.14.*' and sys_platform == 'win32'",
535
+ "python_full_version == '3.14.*' and sys_platform == 'emscripten'",
536
536
  "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
537
537
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32'",
538
538
  "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'",