feat(bigtable): Rerouted DirectRow.commit to use mutate_row - #18191
Conversation
There was a problem hiding this comment.
Code Review
This pull request refactors the commit method in the Row class to use the direct mutate_row API call instead of mutate_rows. It updates error handling to catch GoogleAPICallError and map it to a Status object, while raising a ValueError if no mutations are present. System and unit tests are updated and added to verify these changes. A review comment points out that GoogleAPICallError does not have a details attribute, which would cause an AttributeError at runtime, and suggests using getattr as a safe fallback.
5374832 to
fd63ef0
Compare
| try: | ||
| self._table._table_impl.mutate_row(self.row_key, self._get_mutations()) | ||
| return status_pb2.Status(code=code_pb2.OK) | ||
| except GoogleAPICallError as e: |
There was a problem hiding this comment.
could it be any other type of error? should we have another block to capture all other errors?
There was a problem hiding this comment.
I don't think so. Other exceptions would just be raised here, which is what we declare in the docstring.
If you prefer to return more errors instead of raising, we can make a change though
**Changes Made:** - Use MutateRow instead of MutateRows for DirectRow.commit instead of Table.MutateRows - Added system test for DirectRow.commit because of the decoupling of DirectRow.commit and Table.MutateRows - Adjusted input error system test because of slight changes in error behavior - Adjusted unit tests for DirectRow.commit
fd63ef0 to
7595243
Compare
🤖 I have created a release *beep* *boop* --- <details><summary>django-google-spanner: 5.1.0</summary> ## [5.1.0](django-google-spanner-v5.0.1...django-google-spanner-v5.1.0) (2026-09-03) ### Features * **django-google-spanner:** support Django 6.0 ([#18128](#18128)) ([207d947](207d947)) </details> <details><summary>google-ads-admanager: 0.10.3</summary> ## [0.10.3](google-ads-admanager-v0.10.2...google-ads-admanager-v0.10.3) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-api-core: 2.36.0</summary> ## [2.36.0](google-api-core-v2.35.0...google-api-core-v2.36.0) (2026-09-03) ### Features * **api-core:** add ClientInterceptor and apply_interceptors helper (A) ([#18236](#18236)) ([b6db5a9](b6db5a9)) * **api-core:** add tracer_provider to ClientOptions for OTel support ([#18139](#18139)) ([9ffebc2](9ffebc2)) ### Bug Fixes * **api-core:** handle list-shaped REST error payloads ([#18232](#18232)) ([02d1fd8](02d1fd8)) * **api-core:** move http encoding into transcode method ([#18218](#18218)) ([082a99a](082a99a)) </details> <details><summary>google-cloud-batch: 0.22.3</summary> ## [0.22.3](google-cloud-batch-v0.22.2...google-cloud-batch-v0.22.3) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-biglake-hive: 0.3.3</summary> ## [0.3.3](google-cloud-biglake-hive-v0.3.2...google-cloud-biglake-hive-v0.3.3) (2026-09-03) ### Features * **google/cloud/biglake/hive/v1:** onboard a new library ([#18172](#18172)) ([97668d8](97668d8)) </details> <details><summary>google-cloud-bigquery: 3.45.0</summary> ## [3.45.0](google-cloud-bigquery-v3.44.0...google-cloud-bigquery-v3.45.0) (2026-09-03) ### Features * add user-agent delegation telemetry for pandas-gbq ([#18184](#18184)) ([85ddfe5](85ddfe5)) </details> <details><summary>google-cloud-bigquery-migration: 0.15.1</summary> ## [0.15.1](google-cloud-bigquery-migration-v0.15.0...google-cloud-bigquery-migration-v0.15.1) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-bigquery-reservation: 1.27.0</summary> ## [1.27.0](google-cloud-bigquery-reservation-v1.26.0...google-cloud-bigquery-reservation-v1.27.0) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-bigtable: 2.44.0</summary> ## [2.44.0](google-cloud-bigtable-v2.43.0...google-cloud-bigtable-v2.44.0) (2026-09-03) ### Features * **bigtable:** Rerouted CheckAndMutateRows and ReadModifyWriteRows to data client ([#18190](#18190)) ([990f86e](990f86e)) * **bigtable:** Rerouted DirectRow.commit to use mutate_row ([#18191](#18191)) ([7126a54](7126a54)) * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-compute: 1.52.0</summary> ## [1.52.0](google-cloud-compute-v1.51.0...google-cloud-compute-v1.52.0) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-compute-v1beta: 0.12.3</summary> ## [0.12.3](google-cloud-compute-v1beta-v0.12.2...google-cloud-compute-v1beta-v0.12.3) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-confidentialcomputing: 0.11.1</summary> ## [0.11.1](google-cloud-confidentialcomputing-v0.11.0...google-cloud-confidentialcomputing-v0.11.1) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-config: 0.7.1</summary> ## [0.7.1](google-cloud-config-v0.7.0...google-cloud-config-v0.7.1) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-container: 2.66.0</summary> ## [2.66.0](google-cloud-container-v2.65.0...google-cloud-container-v2.66.0) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-discoveryengine: 0.20.3</summary> ## [0.20.3](google-cloud-discoveryengine-v0.20.2...google-cloud-discoveryengine-v0.20.3) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-dlp: 3.39.0</summary> ## [3.39.0](google-cloud-dlp-v3.38.0...google-cloud-dlp-v3.39.0) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-firestore: 2.30.0</summary> ## [2.30.0](google-cloud-firestore-v2.29.0...google-cloud-firestore-v2.30.0) (2026-09-03) ### Features * **firestore:** configure gRPC message length limits for large documents ([#18220](#18220)) ([6e0f1d9](6e0f1d9)) </details> <details><summary>google-cloud-geminidataanalytics: 0.13.2</summary> ## [0.13.2](google-cloud-geminidataanalytics-v0.13.1...google-cloud-geminidataanalytics-v0.13.2) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) </details> <details><summary>google-cloud-pubsub: 2.40.0</summary> ## [2.40.0](google-cloud-pubsub-v2.39.2...google-cloud-pubsub-v2.40.0) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-cloud-spanner: 3.71.0</summary> ## [3.71.0](google-cloud-spanner-v3.70.0...google-cloud-spanner-v3.71.0) (2026-09-03) ### Features * add send and ack mutations Cloud Spanner Queues ([#17728](#17728)) ([182ff9f](182ff9f)), refs [#17727](#17727) </details> <details><summary>google-cloud-storage-control: 1.15.0</summary> ## [1.15.0](google-cloud-storage-control-v1.14.0...google-cloud-storage-control-v1.15.0) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-developer-knowledge: 0.1.2</summary> ## [0.1.2](google-developer-knowledge-v0.1.1...google-developer-knowledge-v0.1.2) (2026-09-03) ### Features * update API sources and regenerate ([#18267](#18267)) ([813a5c1](813a5c1)) * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-maps-areainsights: 0.5.1</summary> ## [0.5.1](google-maps-areainsights-v0.5.0...google-maps-areainsights-v0.5.1) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>google-maps-mapmanagement: 0.1.1</summary> ## [0.1.1](google-maps-mapmanagement-v0.1.0...google-maps-mapmanagement-v0.1.1) (2026-09-03) ### Features * **google/maps/mapmanagement/v2:** onboard a new library ([#18173](#18173)) ([f0f214b](f0f214b)) </details> <details><summary>google-maps-routing: 0.11.1</summary> ## [0.11.1](google-maps-routing-v0.11.0...google-maps-routing-v0.11.1) (2026-09-03) ### Features * update googleapis and regenerate ([#18229](#18229)) ([d4f8a57](d4f8a57)) </details> <details><summary>googleapis-common-protos: 1.75.3</summary> ## [1.75.3](googleapis-common-protos-v1.75.2...googleapis-common-protos-v1.75.3) (2026-09-03) ### Bug Fixes * **googleapis-common-protos:** remove deprecated license classifier ([#18242](#18242)) ([6f0216a](6f0216a)), refs [#18235](#18235) </details> <details><summary>sqlalchemy-spanner: 1.20.1</summary> ## [1.20.1](sqlalchemy-spanner-v1.20.0...sqlalchemy-spanner-v1.20.1) (2026-09-03) ### Bug Fixes * **sqlalchemy-spanner:** robust session-isolated test databases and clean lifecycle management ([#18179](#18179)) ([3e0bda4](3e0bda4)) ### Documentation * **sqlalchemy-spanner:** centralize CONTRIBUTING.rst pointers ([#18142](#18142)) ([f55ae02](f55ae02)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Migrating over @gkevinzheng PR from bigtable monorepo googleapis/python-bigtable#1276
Original description:
Note to reviewers: This PR has already been reviewed and merged to a staging branch, with the intention of doing a single merge to main. We are now planning to slowly rollout these changes back to the main branch. Minimal re-review should be necessary