fix(firestore): Imropve improper pipeline aliases#16651
Conversation
There was a problem hiding this comment.
Code Review
This pull request prevents calling expression methods on aliased expressions and prohibits chaining multiple aliases by introducing a _supports_expr_methods flag and adding validation logic. The test suite was updated to cover these cases, though the feedback recommends using more specific exception types in pytest.raises instead of a broad Exception to ensure tests do not inadvertently pass on unrelated errors.
| # check if server responds as expected | ||
| with pytest.raises(GoogleAPIError) as err: | ||
|
|
||
| with pytest.raises(Exception) as err: |
There was a problem hiding this comment.
Catching a base Exception is too broad and can mask unrelated bugs or unexpected errors (e.g., NameError, AttributeError, or malformed test data) that might occur during pipeline parsing or execution. Since the expected errors are either client-side validation errors (TypeError) or server-side errors (GoogleAPIError), it is better to catch only those specific types.
| with pytest.raises(Exception) as err: | |
| with pytest.raises((GoogleAPIError, TypeError)) as err: |
| pipeline = parse_pipeline(async_client, test_dict["pipeline"]) | ||
| # check if server responds as expected | ||
| with pytest.raises(GoogleAPIError) as err: | ||
| with pytest.raises(Exception) as err: |
There was a problem hiding this comment.
Catching a base Exception is too broad. It is recommended to use a more specific tuple of expected exceptions, such as (GoogleAPIError, TypeError), to ensure that the test only passes for the intended failure modes and doesn't swallow unrelated issues.
| with pytest.raises(Exception) as err: | |
| with pytest.raises((GoogleAPIError, TypeError)) as err: |
🤖 I have created a release *beep* *boop* --- <details><summary>gapic-generator: 1.36.0</summary> ## [1.36.0](gapic-generator-v1.35.0...gapic-generator-v1.36.0) (2026-06-25) ### Features * **mypy:** centralize mypy.ini and update templates ([#17523](#17523)) ([3a67b7f](3a67b7f)) </details> <details><summary>google-ads-datamanager: 0.9.1</summary> ## [0.9.1](google-ads-datamanager-v0.9.0...google-ads-datamanager-v0.9.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-analytics-admin: 0.30.1</summary> ## [0.30.1](google-analytics-admin-v0.30.0...google-analytics-admin-v0.30.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-apps-chat: 0.10.1</summary> ## [0.10.1](google-apps-chat-v0.10.0...google-apps-chat-v0.10.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-auth: 2.55.1</summary> ## [2.55.1](google-auth-v2.55.0...google-auth-v2.55.1) (2026-06-25) ### Bug Fixes * **auth:** lower regional access boundary logs from warning to debug. ([#17571](#17571)) ([1ef4183](1ef4183)), closes [#17515](#17515) </details> <details><summary>google-cloud-bigtable: 2.40.0</summary> ## [2.40.0](google-cloud-bigtable-v2.39.0...google-cloud-bigtable-v2.40.0) (2026-06-25) ### Features * regenerate google-cloud-bigtable ([#17575](#17575)) ([bd782cf](bd782cf)) ### Bug Fixes * **bigtable:** populate Value type in _format_execute_query_view_params ([#17547](#17547)) ([8cb77d9](8cb77d9)) </details> <details><summary>google-cloud-build: 3.38.0</summary> ## [3.38.0](google-cloud-build-v3.37.0...google-cloud-build-v3.38.0) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-ces: 0.7.1</summary> ## [0.7.1](google-cloud-ces-v0.7.0...google-cloud-ces-v0.7.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-chronicle: 0.6.1</summary> ## [0.6.1](google-cloud-chronicle-v0.6.0...google-cloud-chronicle-v0.6.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-compute: 1.49.0</summary> ## [1.49.0](google-cloud-compute-v1.48.0...google-cloud-compute-v1.49.0) (2026-06-25) ### Features * regenerate google-cloud-compute ([#17576](#17576)) ([140d86f](140d86f)) </details> <details><summary>google-cloud-dataform: 0.11.1</summary> ## [0.11.1](google-cloud-dataform-v0.11.0...google-cloud-dataform-v0.11.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-dataproc: 5.29.0</summary> ## [5.29.0](google-cloud-dataproc-v5.28.0...google-cloud-dataproc-v5.29.0) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-dialogflow: 2.49.0</summary> ## [2.49.0](google-cloud-dialogflow-v2.48.0...google-cloud-dialogflow-v2.49.0) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-dialogflow-cx: 2.7.0</summary> ## [2.7.0](google-cloud-dialogflow-cx-v2.6.0...google-cloud-dialogflow-cx-v2.7.0) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-discoveryengine: 0.20.1</summary> ## [0.20.1](google-cloud-discoveryengine-v0.20.0...google-cloud-discoveryengine-v0.20.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-firestore: 2.28.0</summary> ## [2.28.0](google-cloud-firestore-v2.27.0...google-cloud-firestore-v2.28.0) (2026-06-25) ### Features * **firestore:** drop Python 3.7-3.9 support and regenerate ([#17247](#17247)) ([b11224f](b11224f)) * regenerate google-cloud-[e-i] packages ([#17079](#17079)) ([5239b18](5239b18)) * regenerate google-cloud-firestore ([#17577](#17577)) ([57ebaa3](57ebaa3)) ### Bug Fixes * **firestore:** Imropve improper pipeline aliases ([#16651](#16651)) ([f728bd6](f728bd6)) * **firestore:** remove usage of typing_extensions ([#17357](#17357)) ([cdaf213](cdaf213)) * make test_utils unique_resource_id parallel-safe ([#17440](#17440)) ([ac1f5d5](ac1f5d5)) </details> <details><summary>google-cloud-network-management: 1.37.0</summary> ## [1.37.0](google-cloud-network-management-v1.36.0...google-cloud-network-management-v1.37.0) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-network-security: 0.13.2</summary> ## [0.13.2](google-cloud-network-security-v0.13.1...google-cloud-network-security-v0.13.2) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-network-services: 0.10.1</summary> ## [0.10.1](google-cloud-network-services-v0.10.0...google-cloud-network-services-v0.10.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-oracledatabase: 0.6.1</summary> ## [0.6.1](google-cloud-oracledatabase-v0.6.0...google-cloud-oracledatabase-v0.6.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </details> <details><summary>google-cloud-spanner: 3.69.0</summary> ## [3.69.0](google-cloud-spanner-v3.68.0...google-cloud-spanner-v3.69.0) (2026-06-25) ### Features * regenerate google-cloud-spanner ([#17578](#17578)) ([39b252f](39b252f)) </details> <details><summary>google-cloud-vectorsearch: 0.11.1</summary> ## [0.11.1](google-cloud-vectorsearch-v0.11.0...google-cloud-vectorsearch-v0.11.1) (2026-06-25) ### Features * update googleapis and regenerate ([#17554](#17554)) ([03d0574](03d0574)) </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>
Currently, AliasedExpressions are treated like regular expressions. You can execute additional expressions off of them (
a.as_("number").add(5)), or chain them (a.as_("first").as_("second")). But the backend doesn't actually support aliases being used in this wayThis PR raises an exception if an alias is used in a context it doesn't support
Go version: googleapis/google-cloud-go#14440