Skip to content

feat!: remove session/sandbox support, require hotdata >=0.9 - #43

Merged
anoop-narang merged 2 commits into
mainfrom
feat/remove-session-support
Aug 11, 2026
Merged

feat!: remove session/sandbox support, require hotdata >=0.9#43
anoop-narang merged 2 commits into
mainfrom
feat/remove-session-support

Conversation

@anoop-narang

Copy link
Copy Markdown
Contributor

connect() and the hotdata:// URL no longer accept session_id, the --session
example flag and HOTDATA_SESSION_ID are gone, and no X-Session-Id header is sent.

Forced by the SDK. hotdata 0.9.0 removes the SessionId security scheme, so
Configuration(session_id=...) raises TypeError rather than being ignored, and
http.py passed it unconditionally -- every connection would have failed. Proven
by sabotage: reviving it from the environment (no signature change at all) takes
the suite to 37 failed / 72 passed, because the client cannot even construct.

WHY THIS PACKAGE IS ON THE CRITICAL PATH. Its hotdata cap was <0.9, and
hotdata-dlt-destination pulls it in through its [ibis] extra -- so this cap was
what stopped the destination adopting hotdata 0.9 and hotdata-framework 0.12,
which in turn blocked dlthubworker from using the SDK's new table-layout API
instead of hand-built HTTP. Four repos deep, and this is the bottom of it.

The X-Session-Id test is inverted rather than deleted: it now asserts the header
is ABSENT, at the HTTP layer, because that is the only place a revival shows up.
It also asserts connect(session_id=...) raises, which is what catches a signature
revival -- sabotaged both directions.

Test fixtures gained partition_by / sorted_by on every TableInfo dict. 0.9.0
makes both required, so a listing response omitting them fails validation for the
whole information_schema call rather than for that field. Nine tests failed on
exactly this before the fixtures were updated -- the same total-rather-than-partial
failure mode flagged in review of sdk-python#160.

109 passed.

Why now

This package's hotdata<0.9 cap is the bottom of a four-repo chain:

hotdata-ibis          hotdata <0.9        ← here
  ↑ via [ibis] extra
hotdata-dlt-destination  cannot take hotdata 0.9 / framework 0.12
  ↑
dlthubworker          cannot use the SDK's table-layout API, so it
                      hand-builds two HTTP requests instead

hotdata 0.9.0 and hotdata-framework 0.12.0 are both published; this is what unblocks consuming them.

Verification

109 passed  (was 100 passed / 9 failed before the fixtures were updated)

sabotage: revive the header from the environment  → 37 failed
sabotage: put session_id back on connect()        → 1 failed (the new test)

connect() and the hotdata:// URL no longer accept session_id, the --session
example flag and HOTDATA_SESSION_ID are gone, and no X-Session-Id header is sent.

Forced by the SDK. hotdata 0.9.0 removes the SessionId security scheme, so
Configuration(session_id=...) raises TypeError rather than being ignored, and
http.py passed it unconditionally -- every connection would have failed. Proven
by sabotage: reviving it from the environment (no signature change at all) takes
the suite to 37 failed / 72 passed, because the client cannot even construct.

WHY THIS PACKAGE IS ON THE CRITICAL PATH. Its hotdata cap was <0.9, and
hotdata-dlt-destination pulls it in through its [ibis] extra -- so this cap was
what stopped the destination adopting hotdata 0.9 and hotdata-framework 0.12,
which in turn blocked dlthubworker from using the SDK's new table-layout API
instead of hand-built HTTP. Four repos deep, and this is the bottom of it.

The X-Session-Id test is inverted rather than deleted: it now asserts the header
is ABSENT, at the HTTP layer, because that is the only place a revival shows up.
It also asserts connect(session_id=...) raises, which is what catches a signature
revival -- sabotaged both directions.

Test fixtures gained partition_by / sorted_by on every TableInfo dict. 0.9.0
makes both required, so a listing response omitting them fails validation for the
whole information_schema call rather than for that field. Nine tests failed on
exactly this before the fixtures were updated -- the same total-rather-than-partial
failure mode flagged in review of sdk-python#160.

109 passed.
@anoop-narang
anoop-narang requested a review from a team as a code owner August 11, 2026 16:54
@anoop-narang
anoop-narang requested review from zfarrell and removed request for a team August 11, 2026 16:54
Comment thread src/ibis_hotdata/backend.py
Comment thread tests/test_hotdata_backend.py Outdated
claude[bot]
claude Bot previously approved these changes Aug 11, 2026

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removal is complete and consistent: no session_id left in backend.py, http.py, examples/_helpers.py, or the README, and the dependency floor plus uv.lock match. The inverted X-Session-Id test asserting absence at the HTTP layer plus the TypeError signature check is the right pair of assertions for this removal.

Two non-blocking comments inline. Note that the Python test matrix was still pending when this review ran, so I have not seen the suite result myself.

The changelog claimed the hotdata:// URL "no longer accepts" session_id.
Verified otherwise: _from_url builds its arguments from named lookups and
discards whatever else is in the query string, so session_id there is IGNORED,
not rejected -- an existing URL still connects, minus the header. Only the
keyword argument raises. Now says so, and says the asymmetry is deliberate.

The fixture explanation was pasted verbatim above all seven TableInfo dicts.
Replaced with a spread constant so the reason is stated once and the next
required field is a one-line change rather than seven. Kept as a spread rather
than a full helper because the seven literals differ in which other keys they
set, and rewriting them risked changing what each fixture means.

109 passed.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both prior nits addressed — CHANGELOG now states the URL-ignores / keyword-raises asymmetry, and _REQUIRED_TABLE_FIELDS removes the repeated comment blocks without retrofitting a helper over fixtures that differ. No remaining session_id plumbing outside the test asserting its absence.

Note: the Python 3.10–3.14 test jobs were still queued/in progress when this review ran, so I have not seen their results.

@anoop-narang
anoop-narang merged commit 4287287 into main Aug 11, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant