Skip to content

Commit 4de32a5

Browse files
test: verify read_gbq_colab label preservation in anywidget display mode (#17887)
This PR ensures that `read_gbq_colab` telemetry labels are reliably preserved across BigQuery job configurations when evaluating DataFrames in `anywidget` display mode. Fixes #<538249690> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 88d24a1 commit 4de32a5

3 files changed

Lines changed: 33 additions & 1 deletion

File tree

packages/bigframes/bigframes/session/_io/bigquery/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def create_job_configs_labels(
6868
job_configs_labels = dict(job_configs_labels)
6969

7070
if api_methods and "bigframes-api" not in job_configs_labels:
71+
api_methods = list(api_methods)
7172
job_configs_labels["bigframes-api"] = api_methods[0]
7273
del api_methods[0]
7374

packages/bigframes/tests/unit/session/test_io_bigquery.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def test_add_and_trim_labels_length_limit_met():
172172
for _ in range(52):
173173
df.head()
174174

175-
io_bq.add_and_trim_labels(job_config=job_config)
175+
io_bq.add_and_trim_labels(job_config=job_config, session=df._session)
176176
assert job_config.labels is not None
177177
assert len(job_config.labels) == 56
178178
assert "dataframe-max" not in job_config.labels.values()
@@ -218,6 +218,7 @@ def test_start_query_with_job_labels_length_limit_met(
218218
timeout=timeout,
219219
metrics=None,
220220
publisher=bigframes.core.events.Publisher(),
221+
session=df._session,
221222
)
222223

223224
assert job_config.labels is not None

packages/bigframes/tests/unit/session/test_read_gbq_colab.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,36 @@ def test_read_gbq_colab_includes_label():
4747
assert "session-read_gbq_colab" in label_values
4848

4949

50+
def test_read_gbq_colab_includes_label_in_anywidget_mode():
51+
"""Make sure read_gbq_colab label is preserved in recent-bigframes-api labels in anywidget mode."""
52+
pytest.importorskip("anywidget")
53+
pytest.importorskip("traitlets")
54+
55+
import bigframes
56+
import bigframes.display.html as bf_html
57+
58+
bqclient = mock.create_autospec(bigquery.Client, instance=True)
59+
bqclient.project = "proj"
60+
session = mocks.create_bigquery_session(bqclient=bqclient)
61+
df = session._read_gbq_colab("SELECT 'read-gbq-colab-test'")
62+
63+
with bigframes.option_context("display.render_mode", "anywidget"):
64+
_ = bf_html.get_anywidget_bundle(df)
65+
66+
label_values = []
67+
for kall in itertools.chain(
68+
bqclient.query_and_wait.call_args_list,
69+
bqclient._query_and_wait_bigframes.call_args_list,
70+
bqclient.query.call_args_list,
71+
):
72+
job_config = kall.kwargs.get("job_config")
73+
if job_config is None:
74+
continue
75+
label_values.extend(job_config.labels.values())
76+
77+
assert "session-read_gbq_colab" in label_values
78+
79+
5080
@pytest.mark.parametrize("dry_run", [True, False])
5181
def test_read_gbq_colab_includes_formatted_values_in_dry_run(monkeypatch, dry_run):
5282
bqclient = mock.create_autospec(bigquery.Client, instance=True)

0 commit comments

Comments
 (0)