Shuowei Li
90d · built 2026-08-09
90-day totals
- Commits
- 35
- Grow
- 1.6
- Maintenance
- 11.0
- Fixes
- 1.7
- Total ETV
- 14.4
30-day trajectory
Last 30 days vs. the 30 days before. Up arrows on Growth and ETV mean improvement; up arrow on Fixes share means more time on fixes (worse).
↑+18.2 %
vs 11 prior
↑+12.7 pp
recent vs prior
↑+5.6 pp
recent vs prior
Daily performance
Daily ETV, stacked by Growth, Maintenance and Fixes.
Work-mix over time
Share of Growth / Maintenance / Fixes over a rolling 7-day window. Reads as 'where is effort flowing right now'.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
| Repo | Commits | ETV |
|---|---|---|
| google-cloud-python | 34 | 14.4 |
Most impactful commits
Top 20 by ETV in the 90-day window.
- 9.6ETVfeat: set up Angular infrastructure for TableWidget (#16934) Initialized an Angular workspace within bigframes/display/table_widget_angular and configured a custom build pipeline using esbuild to generate a single-file ESM output. This establishes the infrastructure required for the planned Angular hybrid approach for TableWidget. Verified at: screen/8uAnJEYQr9nx655 Fixes #<505414691> 🦕github.com-googleapis-google-cloud-python · 4d20bab8 · 2026-05-28
- 1.2ETVfix: Respect display.progress_bar=None in background threads (#16715) Fixes extraneous progress bar output during asynchronous query executions (such as Colab SQL cells and visualization plugins) when `display.progress_bar = None` is set via `option_context`. Previously, background query callbacks evaluated thread-local display options within the background worker thread, falling back to default settings (`"auto"`). ### Changes * **`EventEnvelope`**: Introduced a dataclass wrapping query execution events with the initiating thread's active `progress_bar` configuration. * **Query Initiation**: Updated `start_query_with_job` and `start_query_job_optional` to capture the calling thread's display options and emit events wrapped in an `EventEnvelope`. * **Event Listeners**: Updated `progress_callback` and `metrics.on_event` to unwrap `EventEnvelope` and respect the preserved option context, successfully suppressing extraneous output in background execution threads. Verified at here: before: screen/48zpTTWWjZ5wF9Y after: screen/7RS7exRrxgPDEqb Fixes #<461829560> 🦕github.com-googleapis-google-cloud-python · 07dd3315 · 2026-05-18
- 0.9ETVfeat: support interactive execution of deferred DataFrames in TableWidget (#17486) This PR introduces support for deferred execution rendering in TableWidget (the anywidget-based interactive table viewer for Jupyter notebooks). Users can now view dry-run estimations (e.g., query size/cost) and trigger execution directly from the notebook output. Verified at: vs code: go/scrcast/NjcyODQxMDY2MjQzNjg2NHxlNjJhY2Y0NS1hMg colab notebook: go/scrcast/NTk1NzEyMTg0NDcwNzMyOHxjZGQ1ZjQ0NS05NQ Fixes #<460865443> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · 421eebdb · 2026-06-25
- 0.6ETVfeat: support automatic per-cell execution history filtering and isolated callbacks (#17144) This change introduces scoped query tracking and event callback management for BigQuery DataFrames within interactive notebook environments (Jupyter/Colab). Key Changes - Jupyter Cell Scoping: Resolves and carries the active IPython cell execution count (cell_execution_count) through TableWidget, ExecutionSpec, query executors, and final JobMetadata. - Execution History Filtering: Adds events, job_ids, and all_cells parameters to session.execution_history(). When all_cells=False, it filters query logs down to the current active notebook cell. - Scoped Callback Support: Adds a callback parameter to _read_gbq_colab that automatically subscribes to the query progress publisher during execution and automatically unsubscribes upon completion. - Robustness Fixes: 1. Instantiates expected schema/columns in _ExecutionHistory even when the dataframe is empty to prevent indexing errors. 2. Converts custom option mappings to native Python dicts when assigning query labels to avoid validation errors in the underlying BigQuery client. 3. Captures and propagates query_id in BigQueryFinishedEvent. Verified at: [go/scrcast/NjQzOTAzMTUwMzA2MDk5MnwzZWQ2MTMzYS0xYg](http://goto.google.com/scrcast/NjQzOTAzMTUwMzA2MDk5MnwzZWQ2MTMzYS0xYg) Colab notebook test: screen/7d6Yt3C28BUAKEH Fixes #<513337964> 🦕github.com-googleapis-google-cloud-python · 7d440111 · 2026-06-03
- 0.3ETVfeat: add pandas-gbq capability helper (#17957) Introduces `PandasGBQVersions` in `_versions_helpers.py` to support backend delegation and telemetry: 1. **Capability Detection:** Adds `PandasGBQVersions` with `installed_version`, `delegation_api_version`, and `is_delegation_supported` properties. 2. **Safe Fallback:** Handles missing, outdated, or corrupted `pandas-gbq` installations gracefully by defaulting to version `0.0.0` / delegation version `0`. 3. **Unit Tests:** Adds full unit test coverage for cached access, valid versions, uninstalled modules, and corrupted environments in `test__versions_helpers.py`. Fixes #<540939659> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · 2207ca66 · 2026-08-05
- 0.3ETVfeat!: complete deprecation and cleanup of multimodal blob APIs (#16618) This PR deprecates and cleans up experimental Multimodal Blob APIs in BigQuery DataFrames to focus on core supported features. Key Changes: - Removed public APIs: from_glob_path and read_gbq_object_table were removed from module exports and Session class. - Exposed internal API: Added _from_glob_path as an internal API in the module to support existing notebooks. Fixes #<478952827> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · 3624f3bb · 2026-05-14
- 0.2ETVfix: preserve aliases on cast columns and fix star selection in sqlglot (#17394) (#17455) ** This branch is under testing, not ready for review ** This PR resolves a regression introduced when switching to the default `sqlglot` compiler, where cast columns lost their aliases during type-coercion and were auto-named by BigQuery as `f0_`, `f1_`, etc. (fixes #17394). Before: screen/7FibgBYoY6EN8hR After: screen/AWsDt8aocqyzjup Fixes #<521420846> 🦕github.com-googleapis-google-cloud-python · 145034a3 · 2026-06-12
- 0.2ETVtest: add dual-environment validation tests for pandas-gbq delegation (#18018) Adds end-to-end unit test validation for `ReadRowsPage.to_arrow()` delegation to `pandas-gbq` and fallback behavior when `pandas-gbq` is uninstalled. ### Changes * Added `packages/google-cloud-bigquery-storage/tests/unit/test_reader_pandas_gbq.py` * Tests real protobuf decoding and Arrow RecordBatch assembly across multiple BigQuery data types (ints, floats, strings, decimals, dates, UTC timestamps). * Tests empty batch response handling. * Tests multi-page stream concatenation. * Tests safe fallback to legacy in-tree parser when `pandas-gbq` is absent. Fixes #< 540939659 > 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · 71e8d942 · 2026-08-08
- 0.1ETVfeat(pandas-gbq): add arrow decoder for read rows response (#17958) Adds `pandas_gbq.arrow.from_read_rows_response` to decode BigQuery Storage Read API `ReadRowsResponse` protobuf messages into `pyarrow.RecordBatch` instances. ## Changes - `pandas_gbq/arrow.py`: Implements `from_read_rows_response(message, arrow_schema=None)` to deserialize IPC stream and message buffers with empty-batch fallback. - `pandas_gbq/__init__.py`: Exposes `arrow` in package `__all__`. - `tests/unit/test_arrow.py`: Adds unit tests for valid batch parsing, empty message handling, and missing `pyarrow` error handling. Fixes #<540939659> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · e1df28c5 · 2026-08-03
- 0.1ETVfix: cast JSON and nested struct columns to string for anywidget rendering (#17189) This Pull Request resolves visualization crashes when rendering DataFrames or Series containing raw JSON and nested JSON struct structures. It ensures that these columns are safely pre-serialized into clean, flat JSON string format on the database level prior to visual layout rendering. Verified at: screen/424ojbuqyBPinTb Fixes #<514763826> 🦕github.com-googleapis-google-cloud-python · 994a22d6 · 2026-05-20
- 0.1ETVfeat: support gemini-3.x models in loader and update default model to gemini-3.5-flash (#17557) ** STILL IN CLEAN UP STAGE" - Updated the default model in BQML `GeminiTextGenerator` to `gemini-3.5-flash` (instead of `gemini-2.5-pro`). - Registered `gemini-3.1-flash-lite` and `gemini-3.5-flash` endpoints in BQML model loader to prevent `KeyError` during model loading. - Updated all related docstrings, deprecation notes, warnings, and tests to align with the new defaults. - Updated Gemini model references across all sample notebooks to `gemini-3.5-flash` and fixed notebook formatting syntax to pass pre-commit checks. Fixes #<519302924> 🦕github.com-googleapis-google-cloud-python · 3619b29e · 2026-06-25
- 0.1ETVfix: nameless column to_frame bug for pandas 3.0 (#17371) Fixes #<519726816> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · b23bfa4c · 2026-06-05
- 0.1ETVRevert "feat: support gemini-3.x models in loader and update default … (#17602) This reverts PR: https://github.com/googleapis/google-cloud-python/pull/17409 Fixes #<issue_number_goes_here> 🦕github.com-googleapis-google-cloud-python · 1f93a2b8 · 2026-06-30
- 0.1ETVtest: 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>github.com-googleapis-google-cloud-python · 4de32a57 · 2026-07-28
- 0.1ETVfeat: delegate ReadRowsPage.to_arrow to pandas_gbq.arrow (#17938) Emits a deprecation warning on `ReadRowsPage.to_arrow()` and delegates Arrow RecordBatch decoding to `pandas_gbq.arrow.from_read_rows_response` when `pandas-gbq` is installed, falling back to internal parsing otherwise. **Changes Made** - `google/cloud/bigquery_storage_v1/reader.py`: Emits `PendingDeprecationWarning` and calls `pandas_gbq.arrow.from_read_rows_response` with stream schema. Falls back to `_stream_parser.to_arrow` if `pandas-gbq` is uninstalled. - `tests/unit/test_reader_v1_arrow.py`: Adds unit tests verifying delegation when `pandas-gbq` is present and fallback behavior when uninstalled. Fixes #<540939659> 🦕github.com-googleapis-google-cloud-python · aedc66fe · 2026-08-03
- 0.1ETVfeat(bigquery-storage): add deprecation warning for to_dataframe (#18022) Following the addition of `PendingDeprecationWarning` to `ReadRowsPage.to_arrow()` in #17938, this PR adds `PendingDeprecationWarning` to `ReadRowsPage.to_dataframe()` in `google-cloud-bigquery-storage`. This notifies developers to adopt direct `pandas-gbq` APIs (`pandas_gbq.read_gbq()` or `pandas_gbq.pandas.read_bigquery_stream_batches()`) ahead of future deprecation phases. Fixes #< 526614511 > 🦕github.com-googleapis-google-cloud-python · 57e78226 · 2026-08-08
- 0.1ETVfix: emit bracketed inline array syntax for scalar subquery expressions (#17716) Fixes a SQLGlot transpilation bug in BigQuery array generation where single-element arrays containing scalar subqueries wrapped in expressions (e.g., `COALESCE(CAST(...))` or `ROUND(...)`) produced invalid BigQuery SQL syntax `ARRAY(COALESCE(...))`, causing BigQuery `400 Syntax error: Unexpected identifier "COALESCE"` errors on `.cache()`. Verified at: before: screen/9AmutJHVDJuafwm after: screen/u7aW9tTLB8ybUFW Fixes #<534824500> 🦕github.com-googleapis-google-cloud-python · ce5fd500 · 2026-07-16
- 0.1ETVfix: avoid invalid CAST(NULL AS NULL) in SQLGlot compiler (#17487) This PR resolves a compilation crash caused by the SQLGlot compiler attempting to generate an invalid CAST(NULL AS NULL) statement in BigQuery, which triggers a syntax/validation error (e.g., Unexpected keyword NULL). Fixes #<524701452> 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · 3b79caa8 · 2026-06-18
- 0.0ETVtest: catch expected UserWarning in test_repr_mimebundle_selection_logic (#17717) Assert expected `UserWarning` during the fallback path test in `test_repr_mimebundle_selection_logic`. When testing fallback behavior on `anywidget` failure, `html.repr_mimebundle` emits a warning (`Anywidget mode is not available or failed to load`). This change uses `pytest.warns(UserWarning, match=...)` to handle the warning cleanly in unit tests. Fixes #<534917716> 🦕github.com-googleapis-google-cloud-python · 5d3ca449 · 2026-07-16
- 0.0ETVtests(bigquery): harden system test teardown and unit test auth isolation (#17964) Following the merge of PR #17953 for the socket leak fix, this PR focuses on the remaining orthogonal test and fixture hardening fixes: 1. **System Test Teardown Resilience:** Wrap TagKey and TagValue resource deletions in `try...except NotFound: pass` during `TestBigQuery.tearDown()` to prevent cascaded teardown failures when tag resources were already deleted. 2. **Unit Test ADC Isolation:** Enable `autouse=True` on the `use_local_magics_context` fixture in `test_magics.py` to prevent credentials mutation across test runs in uncredentialed CI environments. 3. **InteractiveShell Fixture & Fallback:** Use `IPython.core.interactiveshell.InteractiveShell` and add fallback unit test coverage for `magics.Context`. Related: b/540939659 🦕 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>github.com-googleapis-google-cloud-python · c7e85c7e · 2026-08-03