From 0e0450c9fabd9f2ec7a820996a37df30fac5dc56 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 15 May 2026 08:23:04 -0400 Subject: [PATCH 1/5] fix: enable automl generation by fixing dependencies --- librarian.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/librarian.yaml b/librarian.yaml index 21f0ff9eddcb..c4858e97cf6f 100644 --- a/librarian.yaml +++ b/librarian.yaml @@ -433,7 +433,6 @@ libraries: - google/cloud/automl_v1beta1/services/tables/__init__.py - google/cloud/automl_v1beta1/services/tables/gcs_client.py - google/cloud/automl_v1beta1/services/tables/tables_client.py - skip_generate: true python: library_type: GAPIC_COMBO metadata_name_override: automl From b91cab73a83b9e72fa09f80d50af274e50a4b786 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 15 May 2026 08:37:37 -0400 Subject: [PATCH 2/5] fix: add generated files --- packages/google-cloud-automl/docs/conf.py | 4 +- .../google/cloud/automl_v1/__init__.py | 25 +---- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- .../google/cloud/automl_v1/types/io.py | 71 +++++++++----- .../google/cloud/automl_v1beta1/__init__.py | 25 +---- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- packages/google-cloud-automl/noxfile.py | 4 +- ..._generated_auto_ml_create_dataset_async.py | 6 +- ...v1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...v1_generated_auto_ml_delete_model_async.py | 6 +- ...v1_generated_auto_ml_deploy_model_async.py | 6 +- ..._v1_generated_auto_ml_export_data_async.py | 6 +- ...v1_generated_auto_ml_export_model_async.py | 6 +- ..._v1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- ...a1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...a1_generated_auto_ml_delete_model_async.py | 6 +- ...a1_generated_auto_ml_deploy_model_async.py | 6 +- ...ta1_generated_auto_ml_export_data_async.py | 6 +- ...auto_ml_export_evaluated_examples_async.py | 6 +- ...a1_generated_auto_ml_export_model_async.py | 6 +- ...ta1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- packages/google-cloud-automl/setup.py | 11 +-- .../testing/constraints-3.10.txt | 21 +++-- .../testing/constraints-3.9.txt | 18 ---- .../unit/gapic/automl_v1/test_auto_ml.py | 68 +++++--------- .../automl_v1/test_prediction_service.py | 18 ++-- .../unit/gapic/automl_v1beta1/test_auto_ml.py | 92 +++++++------------ .../automl_v1beta1/test_prediction_service.py | 18 ++-- 36 files changed, 248 insertions(+), 335 deletions(-) delete mode 100644 packages/google-cloud-automl/testing/constraints-3.9.txt diff --git a/packages/google-cloud-automl/docs/conf.py b/packages/google-cloud-automl/docs/conf.py index e6d0f2d68e42..05a107396697 100644 --- a/packages/google-cloud-automl/docs/conf.py +++ b/packages/google-cloud-automl/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -83,7 +83,7 @@ # General information about the project. project = "google-cloud-automl" -copyright = "2025, Google, LLC" +copyright = "2026, Google, LLC" author = "Google APIs" # The version info for the project you're documenting, acts as replacement for diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py index 2968bc863430..60d64076048b 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,13 +21,7 @@ __version__ = package_version.__version__ -if sys.version_info >= (3, 8): # pragma: NO COVER - from importlib import metadata -else: # pragma: NO COVER - # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove - # this code path once we drop support for Python 3.7 - import importlib_metadata as metadata - +from importlib import metadata from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -149,28 +143,17 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: - import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1" - if sys.version_info < (3, 9): + if sys.version_info < (3, 10): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.9, and then update {_package_label}.", - FutureWarning, - ) - if sys.version_info[:2] == (3, 9): - warnings.warn( - f"You are using a Python version ({_py_version_str}) " - + f"which Google will stop supporting in {_package_label} in " - + "January 2026. Please " - + "upgrade to the latest Python version, or at " - + "least to Python 3.10, before then, and " - + f"then update {_package_label}.", + + f"least to Python 3.10, and then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py index a1e1e4366cce..a223d25a04a4 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -365,11 +365,11 @@ async def sample_create_dataset(): ) # Make the request - operation = client.create_dataset(request=request) + operation = await client.create_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -869,11 +869,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1016,11 +1016,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1168,11 +1168,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1424,11 +1424,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1796,11 +1796,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2064,11 +2064,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2205,11 +2205,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2350,11 +2350,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py index 565550a1576d..881cdbaf08f2 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -570,11 +570,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py index 26ec3699d57b..41262d1beb31 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,9 +55,11 @@ class InputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision: + AutoML Vision + ^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ for @@ -98,7 +100,8 @@ class InputConfig(proto.Message): UNASSIGNED,gs://folder/image3.jpg,daisy UNASSIGNED,gs://folder/image4.jpg - Object Detection: + Object Detection + '''''''''''''''' See `Preparing your training data `__ @@ -148,9 +151,11 @@ class InputConfig(proto.Message): - AutoML Video Intelligence: + AutoML Video Intelligence + ^^^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ @@ -200,7 +205,8 @@ class InputConfig(proto.Message): gs://folder/vid2.avi,car,0,60.5 gs://folder/vid3.avi,,, - Object Tracking: + Object Tracking + ''''''''''''''' See `Preparing your training data `__ @@ -263,9 +269,11 @@ class InputConfig(proto.Message): gs://folder/video2.avi,car,1,0,.1,.9,,,.9,.1,, gs://folder/video2.avi,,,,,,,,,,, - AutoML Natural Language: + AutoML Natural Language + ^^^^^^^^^^^^^^^^^^^^^^^ - Entity Extraction: + Entity Extraction + ''''''''''''''''' See `Preparing your training data `__ for @@ -459,7 +467,8 @@ class InputConfig(proto.Message): }, ], - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ @@ -511,7 +520,8 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,BadFood - Sentiment Analysis: + Sentiment Analysis + '''''''''''''''''' See `Preparing your training data `__ @@ -574,7 +584,8 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,2 - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ See `Preparing your training data `__ for @@ -691,7 +702,8 @@ class InputConfig(proto.Message): semantic of the imported data, any string must be up to 25000 characters long. - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ ``schema_inference_version`` : (integer) This value must be supplied. The version of the algorithm to use for the @@ -724,9 +736,11 @@ class BatchPredictInputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision: + AutoML Vision + ^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -746,7 +760,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - Object Detection: + Object Detection + '''''''''''''''' One or more CSV files where each line is a single column: @@ -766,9 +781,11 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - AutoML Video Intelligence: + AutoML Video Intelligence + ^^^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -791,7 +808,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - Object Tracking: + Object Tracking + ''''''''''''''' One or more CSV files where each line is a single column: @@ -814,9 +832,11 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - AutoML Natural Language: + AutoML Natural Language + ^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -837,7 +857,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Sentiment Analysis: + Sentiment Analysis + '''''''''''''''''' One or more CSV files where each line is a single column: @@ -858,7 +879,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Entity Extraction: + Entity Extraction + ''''''''''''''''' One or more JSONL (JSON Lines) files that either provide inline text or documents. You can only use one format, either inline text or @@ -933,7 +955,8 @@ class BatchPredictInputConfig(proto.Message): } } - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ See `Preparing your training data `__ diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py index 310edefc5778..07baf5afcb7c 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,13 +21,7 @@ __version__ = package_version.__version__ -if sys.version_info >= (3, 8): # pragma: NO COVER - from importlib import metadata -else: # pragma: NO COVER - # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove - # this code path once we drop support for Python 3.7 - import importlib_metadata as metadata - +from importlib import metadata from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -195,28 +189,17 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: - import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1beta1" - if sys.version_info < (3, 9): + if sys.version_info < (3, 10): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.9, and then update {_package_label}.", - FutureWarning, - ) - if sys.version_info[:2] == (3, 9): - warnings.warn( - f"You are using a Python version ({_py_version_str}) " - + f"which Google will stop supporting in {_package_label} in " - + "January 2026. Please " - + "upgrade to the latest Python version, or at " - + "least to Python 3.10, before then, and " - + f"then update {_package_label}.", + + f"least to Python 3.10, and then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py index bbc60a196714..340116618550 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -859,11 +859,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1002,11 +1002,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1150,11 +1150,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2120,11 +2120,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2492,11 +2492,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2639,11 +2639,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2780,11 +2780,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2922,11 +2922,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -3081,11 +3081,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = client.export_evaluated_examples(request=request) + operation = await client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py index 1b7f0dc86888..48806d2da5aa 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -536,11 +536,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/noxfile.py b/packages/google-cloud-automl/noxfile.py index 4e126e3abe91..aa307e6f99c4 100644 --- a/packages/google-cloud-automl/noxfile.py +++ b/packages/google-cloud-automl/noxfile.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,7 +31,6 @@ LINT_PATHS.append("samples") ALL_PYTHON = [ - "3.9", "3.10", "3.11", "3.12", @@ -391,7 +390,6 @@ def docs(session): shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( "sphinx-build", - "-W", # warnings as errors "-T", # show full traceback on exception "-N", # no colors "-b", diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py index ebdce3d3ca7e..e39d2a112f0a 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -53,11 +53,11 @@ async def sample_create_dataset(): ) # Make the request - operation = client.create_dataset(request=request) + operation = await client.create_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py index 3f05c7b83e4d..7f3576f0ca4f 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py index 4f79dbb43392..bf73628b9b51 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py index 994476f3e411..6ec9f3a4a899 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py index 2b6aa5e36da0..70df9ca4f525 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py index eda683a06cd8..823afa076c57 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py index babad52490b0..96c993fe4da2 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py index 0df6eba7ab30..ab0f9b6ffd0c 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py index 91b9a168f270..1e11c6ac8086 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py index 5f19c4226683..7d85d80ed7ab 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -52,11 +52,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py index 76b87740d080..b4be09c5429a 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py index a4c6e1d7ec82..91aec7607d10 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py index c98857b95be5..bec81527b747 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py index f4de388af10e..aa5c2f3ef761 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py index a30f6af27324..2c98e3d4e1d4 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py index b970f50ac5be..7ed13eb71741 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = client.export_evaluated_examples(request=request) + operation = await client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py index 65ee458d4dd8..d95878ad49ec 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py index e28851a3899e..23c576be2c00 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py index 131f7e327dcf..df2160110cfe 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py index 18600baf725f..b7af37fbd6e3 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/setup.py b/packages/google-cloud-automl/setup.py index d92d1981fe09..2ad42826fa4f 100644 --- a/packages/google-cloud-automl/setup.py +++ b/packages/google-cloud-automl/setup.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -39,11 +39,11 @@ release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-api-core[grpc] >= 2.11.0, <3.0.0", + "google-api-core[grpc] >= 2.17.1, <3.0.0", # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", - "grpcio >= 1.33.2, < 2.0.0", + "grpcio >= 1.44.0, < 2.0.0", "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", @@ -76,7 +76,7 @@ long_description=readme, author="Google LLC", author_email="googleapis-packages@google.com", - license="Apache 2.0", + license="Apache-2.0", url=url, classifiers=[ release_status, @@ -84,7 +84,6 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -95,7 +94,7 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, - python_requires=">=3.9", + python_requires=">=3.10", install_requires=dependencies, extras_require=extras, include_package_data=True, diff --git a/packages/google-cloud-automl/testing/constraints-3.10.txt b/packages/google-cloud-automl/testing/constraints-3.10.txt index 7599dea499ed..bac7ba85b4ee 100644 --- a/packages/google-cloud-automl/testing/constraints-3.10.txt +++ b/packages/google-cloud-automl/testing/constraints-3.10.txt @@ -1,10 +1,11 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -google-auth -grpcio -proto-plus -protobuf -# cryptography is a direct dependency of google-auth -cryptography +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file, +# pinning their versions to their lower bounds. +# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# then this file should have google-cloud-foo==1.14.0 +google-api-core==2.17.1 +google-auth==2.14.1 +grpcio==1.44.0 +proto-plus==1.22.3 +protobuf==4.25.8 diff --git a/packages/google-cloud-automl/testing/constraints-3.9.txt b/packages/google-cloud-automl/testing/constraints-3.9.txt deleted file mode 100644 index 60e67851a5fa..000000000000 --- a/packages/google-cloud-automl/testing/constraints-3.9.txt +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file, -# pinning their versions to their lower bounds. -# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", -# then this file should have google-cloud-foo==1.14.0 -google-api-core==2.21.0 -google-cloud-storage==2.14.0 -libcst==0.2.5 -pandas==1.1.3 -# numpy is a dependency of pandas -numpy==1.19.3 -google-auth==2.35.0 -# TODO(https://github.com/googleapis/gapic-generator-python/issues/2453) -# Add the minimum supported version of grpcio to constraints files -proto-plus==1.22.3 -protobuf==4.25.8 diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py index 85020d51d6c8..879cab860a75 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2474,11 +2468,7 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_datasets(request={}) - ).pages: + async for page_ in (await client.list_datasets(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5440,11 +5430,7 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_models(request={}) - ).pages: + async for page_ in (await client.list_models(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8058,11 +8044,7 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_model_evaluations(request={}) - ).pages: + async for page_ in (await client.list_model_evaluations(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8176,7 +8158,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_dataset_rest_unset_required_fields(): @@ -8367,7 +8349,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_dataset_rest_unset_required_fields(): @@ -8550,7 +8532,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_datasets_rest_unset_required_fields(): @@ -8793,7 +8775,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_dataset_rest_unset_required_fields(): @@ -8990,7 +8972,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_dataset_rest_unset_required_fields(): @@ -9165,7 +9147,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_import_data_rest_unset_required_fields(): @@ -9355,7 +9337,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_data_rest_unset_required_fields(): @@ -9553,7 +9535,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_annotation_spec_rest_unset_required_fields(): @@ -9733,7 +9715,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_model_rest_unset_required_fields(): @@ -9924,7 +9906,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_rest_unset_required_fields(): @@ -10107,7 +10089,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_models_rest_unset_required_fields(): @@ -10353,7 +10335,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_model_rest_unset_required_fields(): @@ -10524,7 +10506,7 @@ def test_update_model_rest_required_fields(request_type=service.UpdateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_model_rest_unset_required_fields(): @@ -10722,7 +10704,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_deploy_model_rest_unset_required_fields(): @@ -10898,7 +10880,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_undeploy_model_rest_unset_required_fields(): @@ -11074,7 +11056,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_model_rest_unset_required_fields(): @@ -11272,7 +11254,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_evaluation_rest_unset_required_fields(): @@ -11478,7 +11460,7 @@ def test_list_model_evaluations_rest_required_fields( ("$alt", "json;enum-encoding=int"), ] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py index 604b4a7e6d94..150a650704b4 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2210,7 +2204,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_predict_rest_unset_required_fields(): @@ -2406,7 +2400,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_batch_predict_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py index 17adbaf502f2..bfdfcb0279fc 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2491,11 +2485,7 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_datasets(request={}) - ).pages: + async for page_ in (await client.list_datasets(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5098,11 +5088,7 @@ async def test_list_table_specs_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_table_specs(request={}) - ).pages: + async for page_ in (await client.list_table_specs(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -6329,11 +6315,7 @@ async def test_list_column_specs_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_column_specs(request={}) - ).pages: + async for page_ in (await client.list_column_specs(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -7885,11 +7867,7 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_models(request={}) - ).pages: + async for page_ in (await client.list_models(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10504,11 +10482,7 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_model_evaluations(request={}) - ).pages: + async for page_ in (await client.list_model_evaluations(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10621,7 +10595,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_dataset_rest_unset_required_fields(): @@ -10815,7 +10789,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_dataset_rest_unset_required_fields(): @@ -10999,7 +10973,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_datasets_rest_unset_required_fields(): @@ -11243,7 +11217,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_dataset_rest_unset_required_fields(): @@ -11430,7 +11404,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_dataset_rest_unset_required_fields(): @@ -11606,7 +11580,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_import_data_rest_unset_required_fields(): @@ -11796,7 +11770,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_data_rest_unset_required_fields(): @@ -11994,7 +11968,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_annotation_spec_rest_unset_required_fields(): @@ -12174,7 +12148,7 @@ def test_get_table_spec_rest_required_fields(request_type=service.GetTableSpecRe expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_table_spec_rest_unset_required_fields(): @@ -12365,7 +12339,7 @@ def test_list_table_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_table_specs_rest_unset_required_fields(): @@ -12618,7 +12592,7 @@ def test_update_table_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_table_spec_rest_unset_required_fields(): @@ -12802,7 +12776,7 @@ def test_get_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_column_spec_rest_unset_required_fields(): @@ -12993,7 +12967,7 @@ def test_list_column_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_column_specs_rest_unset_required_fields(): @@ -13248,7 +13222,7 @@ def test_update_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_column_spec_rest_unset_required_fields(): @@ -13430,7 +13404,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_model_rest_unset_required_fields(): @@ -13622,7 +13596,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_rest_unset_required_fields(): @@ -13806,7 +13780,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_models_rest_unset_required_fields(): @@ -14053,7 +14027,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_model_rest_unset_required_fields(): @@ -14229,7 +14203,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_deploy_model_rest_unset_required_fields(): @@ -14405,7 +14379,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_undeploy_model_rest_unset_required_fields(): @@ -14581,7 +14555,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_model_rest_unset_required_fields(): @@ -14782,7 +14756,7 @@ def test_export_evaluated_examples_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_evaluated_examples_rest_unset_required_fields(): @@ -14980,7 +14954,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_evaluation_rest_unset_required_fields(): @@ -15173,7 +15147,7 @@ def test_list_model_evaluations_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py index 5761dae4fe1f..82e3197ef322 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2211,7 +2205,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_predict_rest_unset_required_fields(): @@ -2407,7 +2401,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_batch_predict_rest_unset_required_fields(): From 81aa632d46401b11c6d1df0425ce6f35079def52 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 15 May 2026 09:12:48 -0400 Subject: [PATCH 3/5] Revert "fix: add generated files" This reverts commit b91cab73a83b9e72fa09f80d50af274e50a4b786. --- packages/google-cloud-automl/docs/conf.py | 4 +- .../google/cloud/automl_v1/__init__.py | 25 ++++- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- .../google/cloud/automl_v1/types/io.py | 71 +++++--------- .../google/cloud/automl_v1beta1/__init__.py | 25 ++++- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- packages/google-cloud-automl/noxfile.py | 4 +- ..._generated_auto_ml_create_dataset_async.py | 6 +- ...v1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...v1_generated_auto_ml_delete_model_async.py | 6 +- ...v1_generated_auto_ml_deploy_model_async.py | 6 +- ..._v1_generated_auto_ml_export_data_async.py | 6 +- ...v1_generated_auto_ml_export_model_async.py | 6 +- ..._v1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- ...a1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...a1_generated_auto_ml_delete_model_async.py | 6 +- ...a1_generated_auto_ml_deploy_model_async.py | 6 +- ...ta1_generated_auto_ml_export_data_async.py | 6 +- ...auto_ml_export_evaluated_examples_async.py | 6 +- ...a1_generated_auto_ml_export_model_async.py | 6 +- ...ta1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- packages/google-cloud-automl/setup.py | 11 ++- .../testing/constraints-3.10.txt | 21 ++--- .../testing/constraints-3.9.txt | 18 ++++ .../unit/gapic/automl_v1/test_auto_ml.py | 68 +++++++++----- .../automl_v1/test_prediction_service.py | 18 ++-- .../unit/gapic/automl_v1beta1/test_auto_ml.py | 92 ++++++++++++------- .../automl_v1beta1/test_prediction_service.py | 18 ++-- 36 files changed, 335 insertions(+), 248 deletions(-) create mode 100644 packages/google-cloud-automl/testing/constraints-3.9.txt diff --git a/packages/google-cloud-automl/docs/conf.py b/packages/google-cloud-automl/docs/conf.py index 05a107396697..e6d0f2d68e42 100644 --- a/packages/google-cloud-automl/docs/conf.py +++ b/packages/google-cloud-automl/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -83,7 +83,7 @@ # General information about the project. project = "google-cloud-automl" -copyright = "2026, Google, LLC" +copyright = "2025, Google, LLC" author = "Google APIs" # The version info for the project you're documenting, acts as replacement for diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py index 60d64076048b..2968bc863430 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,7 +21,13 @@ __version__ = package_version.__version__ -from importlib import metadata +if sys.version_info >= (3, 8): # pragma: NO COVER + from importlib import metadata +else: # pragma: NO COVER + # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove + # this code path once we drop support for Python 3.7 + import importlib_metadata as metadata + from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -143,17 +149,28 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: + import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1" - if sys.version_info < (3, 10): + if sys.version_info < (3, 9): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.10, and then update {_package_label}.", + + f"least to Python 3.9, and then update {_package_label}.", + FutureWarning, + ) + if sys.version_info[:2] == (3, 9): + warnings.warn( + f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} in " + + "January 2026. Please " + + "upgrade to the latest Python version, or at " + + "least to Python 3.10, before then, and " + + f"then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py index a223d25a04a4..a1e1e4366cce 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -365,11 +365,11 @@ async def sample_create_dataset(): ) # Make the request - operation = await client.create_dataset(request=request) + operation = client.create_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -869,11 +869,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = await client.delete_dataset(request=request) + operation = client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1016,11 +1016,11 @@ async def sample_import_data(): ) # Make the request - operation = await client.import_data(request=request) + operation = client.import_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1168,11 +1168,11 @@ async def sample_export_data(): ) # Make the request - operation = await client.export_data(request=request) + operation = client.export_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1424,11 +1424,11 @@ async def sample_create_model(): ) # Make the request - operation = await client.create_model(request=request) + operation = client.create_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1796,11 +1796,11 @@ async def sample_delete_model(): ) # Make the request - operation = await client.delete_model(request=request) + operation = client.delete_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2064,11 +2064,11 @@ async def sample_deploy_model(): ) # Make the request - operation = await client.deploy_model(request=request) + operation = client.deploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2205,11 +2205,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = await client.undeploy_model(request=request) + operation = client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2350,11 +2350,11 @@ async def sample_export_model(): ) # Make the request - operation = await client.export_model(request=request) + operation = client.export_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py index 881cdbaf08f2..565550a1576d 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -570,11 +570,11 @@ async def sample_batch_predict(): ) # Make the request - operation = await client.batch_predict(request=request) + operation = client.batch_predict(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py index 41262d1beb31..26ec3699d57b 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,11 +55,9 @@ class InputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision - ^^^^^^^^^^^^^ + AutoML Vision: - Classification - '''''''''''''' + Classification: See `Preparing your training data `__ for @@ -100,8 +98,7 @@ class InputConfig(proto.Message): UNASSIGNED,gs://folder/image3.jpg,daisy UNASSIGNED,gs://folder/image4.jpg - Object Detection - '''''''''''''''' + Object Detection: See `Preparing your training data `__ @@ -151,11 +148,9 @@ class InputConfig(proto.Message): - AutoML Video Intelligence - ^^^^^^^^^^^^^^^^^^^^^^^^^ + AutoML Video Intelligence: - Classification - '''''''''''''' + Classification: See `Preparing your training data `__ @@ -205,8 +200,7 @@ class InputConfig(proto.Message): gs://folder/vid2.avi,car,0,60.5 gs://folder/vid3.avi,,, - Object Tracking - ''''''''''''''' + Object Tracking: See `Preparing your training data `__ @@ -269,11 +263,9 @@ class InputConfig(proto.Message): gs://folder/video2.avi,car,1,0,.1,.9,,,.9,.1,, gs://folder/video2.avi,,,,,,,,,,, - AutoML Natural Language - ^^^^^^^^^^^^^^^^^^^^^^^ + AutoML Natural Language: - Entity Extraction - ''''''''''''''''' + Entity Extraction: See `Preparing your training data `__ for @@ -467,8 +459,7 @@ class InputConfig(proto.Message): }, ], - Classification - '''''''''''''' + Classification: See `Preparing your training data `__ @@ -520,8 +511,7 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,BadFood - Sentiment Analysis - '''''''''''''''''' + Sentiment Analysis: See `Preparing your training data `__ @@ -584,8 +574,7 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,2 - AutoML Tables - ^^^^^^^^^^^^^ + AutoML Tables: See `Preparing your training data `__ for @@ -702,8 +691,7 @@ class InputConfig(proto.Message): semantic of the imported data, any string must be up to 25000 characters long. - AutoML Tables - ^^^^^^^^^^^^^ + AutoML Tables: ``schema_inference_version`` : (integer) This value must be supplied. The version of the algorithm to use for the @@ -736,11 +724,9 @@ class BatchPredictInputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision - ^^^^^^^^^^^^^ + AutoML Vision: - Classification - '''''''''''''' + Classification: One or more CSV files where each line is a single column: @@ -760,8 +746,7 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - Object Detection - '''''''''''''''' + Object Detection: One or more CSV files where each line is a single column: @@ -781,11 +766,9 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - AutoML Video Intelligence - ^^^^^^^^^^^^^^^^^^^^^^^^^ + AutoML Video Intelligence: - Classification - '''''''''''''' + Classification: One or more CSV files where each line is a single column: @@ -808,8 +791,7 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - Object Tracking - ''''''''''''''' + Object Tracking: One or more CSV files where each line is a single column: @@ -832,11 +814,9 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - AutoML Natural Language - ^^^^^^^^^^^^^^^^^^^^^^^ + AutoML Natural Language: - Classification - '''''''''''''' + Classification: One or more CSV files where each line is a single column: @@ -857,8 +837,7 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Sentiment Analysis - '''''''''''''''''' + Sentiment Analysis: One or more CSV files where each line is a single column: @@ -879,8 +858,7 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Entity Extraction - ''''''''''''''''' + Entity Extraction: One or more JSONL (JSON Lines) files that either provide inline text or documents. You can only use one format, either inline text or @@ -955,8 +933,7 @@ class BatchPredictInputConfig(proto.Message): } } - AutoML Tables - ^^^^^^^^^^^^^ + AutoML Tables: See `Preparing your training data `__ diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py index 07baf5afcb7c..310edefc5778 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,7 +21,13 @@ __version__ = package_version.__version__ -from importlib import metadata +if sys.version_info >= (3, 8): # pragma: NO COVER + from importlib import metadata +else: # pragma: NO COVER + # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove + # this code path once we drop support for Python 3.7 + import importlib_metadata as metadata + from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -189,17 +195,28 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: + import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1beta1" - if sys.version_info < (3, 10): + if sys.version_info < (3, 9): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.10, and then update {_package_label}.", + + f"least to Python 3.9, and then update {_package_label}.", + FutureWarning, + ) + if sys.version_info[:2] == (3, 9): + warnings.warn( + f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} in " + + "January 2026. Please " + + "upgrade to the latest Python version, or at " + + "least to Python 3.10, before then, and " + + f"then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py index 340116618550..bbc60a196714 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -859,11 +859,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = await client.delete_dataset(request=request) + operation = client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1002,11 +1002,11 @@ async def sample_import_data(): ) # Make the request - operation = await client.import_data(request=request) + operation = client.import_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -1150,11 +1150,11 @@ async def sample_export_data(): ) # Make the request - operation = await client.export_data(request=request) + operation = client.export_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2120,11 +2120,11 @@ async def sample_create_model(): ) # Make the request - operation = await client.create_model(request=request) + operation = client.create_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2492,11 +2492,11 @@ async def sample_delete_model(): ) # Make the request - operation = await client.delete_model(request=request) + operation = client.delete_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2639,11 +2639,11 @@ async def sample_deploy_model(): ) # Make the request - operation = await client.deploy_model(request=request) + operation = client.deploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2780,11 +2780,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = await client.undeploy_model(request=request) + operation = client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -2922,11 +2922,11 @@ async def sample_export_model(): ) # Make the request - operation = await client.export_model(request=request) + operation = client.export_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) @@ -3081,11 +3081,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = await client.export_evaluated_examples(request=request) + operation = client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py index 48806d2da5aa..1b7f0dc86888 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -536,11 +536,11 @@ async def sample_batch_predict(): ) # Make the request - operation = await client.batch_predict(request=request) + operation = client.batch_predict(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/noxfile.py b/packages/google-cloud-automl/noxfile.py index aa307e6f99c4..4e126e3abe91 100644 --- a/packages/google-cloud-automl/noxfile.py +++ b/packages/google-cloud-automl/noxfile.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ LINT_PATHS.append("samples") ALL_PYTHON = [ + "3.9", "3.10", "3.11", "3.12", @@ -390,6 +391,7 @@ def docs(session): shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( "sphinx-build", + "-W", # warnings as errors "-T", # show full traceback on exception "-N", # no colors "-b", diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py index e39d2a112f0a..ebdce3d3ca7e 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -53,11 +53,11 @@ async def sample_create_dataset(): ) # Make the request - operation = await client.create_dataset(request=request) + operation = client.create_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py index 7f3576f0ca4f..3f05c7b83e4d 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = await client.create_model(request=request) + operation = client.create_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py index bf73628b9b51..4f79dbb43392 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = await client.delete_dataset(request=request) + operation = client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py index 6ec9f3a4a899..994476f3e411 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = await client.delete_model(request=request) + operation = client.delete_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py index 70df9ca4f525..2b6aa5e36da0 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = await client.deploy_model(request=request) + operation = client.deploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py index 823afa076c57..eda683a06cd8 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_data(): ) # Make the request - operation = await client.export_data(request=request) + operation = client.export_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py index 96c993fe4da2..babad52490b0 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_model(): ) # Make the request - operation = await client.export_model(request=request) + operation = client.export_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py index ab0f9b6ffd0c..0df6eba7ab30 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_import_data(): ) # Make the request - operation = await client.import_data(request=request) + operation = client.import_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py index 1e11c6ac8086..91b9a168f270 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = await client.undeploy_model(request=request) + operation = client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py index 7d85d80ed7ab..5f19c4226683 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -52,11 +52,11 @@ async def sample_batch_predict(): ) # Make the request - operation = await client.batch_predict(request=request) + operation = client.batch_predict(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py index b4be09c5429a..76b87740d080 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = await client.create_model(request=request) + operation = client.create_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py index 91aec7607d10..a4c6e1d7ec82 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = await client.delete_dataset(request=request) + operation = client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py index bec81527b747..c98857b95be5 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = await client.delete_model(request=request) + operation = client.delete_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py index aa5c2f3ef761..f4de388af10e 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = await client.deploy_model(request=request) + operation = client.deploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py index 2c98e3d4e1d4..a30f6af27324 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_data(): ) # Make the request - operation = await client.export_data(request=request) + operation = client.export_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py index 7ed13eb71741..b970f50ac5be 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = await client.export_evaluated_examples(request=request) + operation = client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py index d95878ad49ec..65ee458d4dd8 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_model(): ) # Make the request - operation = await client.export_model(request=request) + operation = client.export_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py index 23c576be2c00..e28851a3899e 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_import_data(): ) # Make the request - operation = await client.import_data(request=request) + operation = client.import_data(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py index df2160110cfe..131f7e327dcf 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = await client.undeploy_model(request=request) + operation = client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py index b7af37fbd6e3..18600baf725f 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_batch_predict(): ) # Make the request - operation = await client.batch_predict(request=request) + operation = client.batch_predict(request=request) print("Waiting for operation to complete...") - response = await operation.result() + response = (await operation).result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/setup.py b/packages/google-cloud-automl/setup.py index 2ad42826fa4f..d92d1981fe09 100644 --- a/packages/google-cloud-automl/setup.py +++ b/packages/google-cloud-automl/setup.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -39,11 +39,11 @@ release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-api-core[grpc] >= 2.17.1, <3.0.0", + "google-api-core[grpc] >= 2.11.0, <3.0.0", # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", - "grpcio >= 1.44.0, < 2.0.0", + "grpcio >= 1.33.2, < 2.0.0", "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", @@ -76,7 +76,7 @@ long_description=readme, author="Google LLC", author_email="googleapis-packages@google.com", - license="Apache-2.0", + license="Apache 2.0", url=url, classifiers=[ release_status, @@ -84,6 +84,7 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -94,7 +95,7 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, - python_requires=">=3.10", + python_requires=">=3.9", install_requires=dependencies, extras_require=extras, include_package_data=True, diff --git a/packages/google-cloud-automl/testing/constraints-3.10.txt b/packages/google-cloud-automl/testing/constraints-3.10.txt index bac7ba85b4ee..7599dea499ed 100644 --- a/packages/google-cloud-automl/testing/constraints-3.10.txt +++ b/packages/google-cloud-automl/testing/constraints-3.10.txt @@ -1,11 +1,10 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file, -# pinning their versions to their lower bounds. -# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", -# then this file should have google-cloud-foo==1.14.0 -google-api-core==2.17.1 -google-auth==2.14.1 -grpcio==1.44.0 -proto-plus==1.22.3 -protobuf==4.25.8 +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +google-auth +grpcio +proto-plus +protobuf +# cryptography is a direct dependency of google-auth +cryptography diff --git a/packages/google-cloud-automl/testing/constraints-3.9.txt b/packages/google-cloud-automl/testing/constraints-3.9.txt new file mode 100644 index 000000000000..60e67851a5fa --- /dev/null +++ b/packages/google-cloud-automl/testing/constraints-3.9.txt @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file, +# pinning their versions to their lower bounds. +# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# then this file should have google-cloud-foo==1.14.0 +google-api-core==2.21.0 +google-cloud-storage==2.14.0 +libcst==0.2.5 +pandas==1.1.3 +# numpy is a dependency of pandas +numpy==1.19.3 +google-auth==2.35.0 +# TODO(https://github.com/googleapis/gapic-generator-python/issues/2453) +# Add the minimum supported version of grpcio to constraints files +proto-plus==1.22.3 +protobuf==4.25.8 diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py index 879cab860a75..85020d51d6c8 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,12 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + import json import math -import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence -from unittest import mock -from unittest.mock import AsyncMock import grpc import pytest @@ -2468,7 +2474,11 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_datasets(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_datasets(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5430,7 +5440,11 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_models(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_models(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8044,7 +8058,11 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_model_evaluations(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_model_evaluations(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8158,7 +8176,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_create_dataset_rest_unset_required_fields(): @@ -8349,7 +8367,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_dataset_rest_unset_required_fields(): @@ -8532,7 +8550,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_datasets_rest_unset_required_fields(): @@ -8775,7 +8793,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_update_dataset_rest_unset_required_fields(): @@ -8972,7 +8990,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_delete_dataset_rest_unset_required_fields(): @@ -9147,7 +9165,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_import_data_rest_unset_required_fields(): @@ -9337,7 +9355,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_export_data_rest_unset_required_fields(): @@ -9535,7 +9553,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_annotation_spec_rest_unset_required_fields(): @@ -9715,7 +9733,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_create_model_rest_unset_required_fields(): @@ -9906,7 +9924,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_model_rest_unset_required_fields(): @@ -10089,7 +10107,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_models_rest_unset_required_fields(): @@ -10335,7 +10353,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_delete_model_rest_unset_required_fields(): @@ -10506,7 +10524,7 @@ def test_update_model_rest_required_fields(request_type=service.UpdateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_update_model_rest_unset_required_fields(): @@ -10704,7 +10722,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_deploy_model_rest_unset_required_fields(): @@ -10880,7 +10898,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_undeploy_model_rest_unset_required_fields(): @@ -11056,7 +11074,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_export_model_rest_unset_required_fields(): @@ -11254,7 +11272,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_model_evaluation_rest_unset_required_fields(): @@ -11460,7 +11478,7 @@ def test_list_model_evaluations_rest_required_fields( ("$alt", "json;enum-encoding=int"), ] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py index 150a650704b4..604b4a7e6d94 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,12 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + import json import math -import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence -from unittest import mock -from unittest.mock import AsyncMock import grpc import pytest @@ -2204,7 +2210,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_predict_rest_unset_required_fields(): @@ -2400,7 +2406,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_batch_predict_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py index bfdfcb0279fc..17adbaf502f2 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,12 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + import json import math -import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence -from unittest import mock -from unittest.mock import AsyncMock import grpc import pytest @@ -2485,7 +2491,11 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_datasets(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_datasets(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5088,7 +5098,11 @@ async def test_list_table_specs_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_table_specs(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_table_specs(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -6315,7 +6329,11 @@ async def test_list_column_specs_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_column_specs(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_column_specs(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -7867,7 +7885,11 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_models(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_models(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10482,7 +10504,11 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - async for page_ in (await client.list_model_evaluations(request={})).pages: + # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` + # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 + async for page_ in ( # pragma: no branch + await client.list_model_evaluations(request={}) + ).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10595,7 +10621,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_create_dataset_rest_unset_required_fields(): @@ -10789,7 +10815,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_dataset_rest_unset_required_fields(): @@ -10973,7 +10999,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_datasets_rest_unset_required_fields(): @@ -11217,7 +11243,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_update_dataset_rest_unset_required_fields(): @@ -11404,7 +11430,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_delete_dataset_rest_unset_required_fields(): @@ -11580,7 +11606,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_import_data_rest_unset_required_fields(): @@ -11770,7 +11796,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_export_data_rest_unset_required_fields(): @@ -11968,7 +11994,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_annotation_spec_rest_unset_required_fields(): @@ -12148,7 +12174,7 @@ def test_get_table_spec_rest_required_fields(request_type=service.GetTableSpecRe expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_table_spec_rest_unset_required_fields(): @@ -12339,7 +12365,7 @@ def test_list_table_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_table_specs_rest_unset_required_fields(): @@ -12592,7 +12618,7 @@ def test_update_table_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_update_table_spec_rest_unset_required_fields(): @@ -12776,7 +12802,7 @@ def test_get_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_column_spec_rest_unset_required_fields(): @@ -12967,7 +12993,7 @@ def test_list_column_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_column_specs_rest_unset_required_fields(): @@ -13222,7 +13248,7 @@ def test_update_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_update_column_spec_rest_unset_required_fields(): @@ -13404,7 +13430,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_create_model_rest_unset_required_fields(): @@ -13596,7 +13622,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_model_rest_unset_required_fields(): @@ -13780,7 +13806,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_models_rest_unset_required_fields(): @@ -14027,7 +14053,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_delete_model_rest_unset_required_fields(): @@ -14203,7 +14229,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_deploy_model_rest_unset_required_fields(): @@ -14379,7 +14405,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_undeploy_model_rest_unset_required_fields(): @@ -14555,7 +14581,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_export_model_rest_unset_required_fields(): @@ -14756,7 +14782,7 @@ def test_export_evaluated_examples_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_export_evaluated_examples_rest_unset_required_fields(): @@ -14954,7 +14980,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_get_model_evaluation_rest_unset_required_fields(): @@ -15147,7 +15173,7 @@ def test_list_model_evaluations_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py index 82e3197ef322..5761dae4fe1f 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2026 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,12 +13,18 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + import json import math -import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence -from unittest import mock -from unittest.mock import AsyncMock import grpc import pytest @@ -2205,7 +2211,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_predict_rest_unset_required_fields(): @@ -2401,7 +2407,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert sorted(expected_params) == sorted(actual_params) + assert expected_params == actual_params def test_batch_predict_rest_unset_required_fields(): From 8a46389768a9426b524da56fa1ebe8c21f3fa32b Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 15 May 2026 11:28:30 -0400 Subject: [PATCH 4/5] chore: updates to replacements --- .../integrate-isolated-handwritten-code.yaml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml index 8141056571a6..0ac8a6db7440 100644 --- a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml +++ b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml @@ -192,6 +192,21 @@ replacements: monitoring_v3/services_ monitoring_v3/types_ count: 1 + - paths: [ + packages/google-cloud-automl/setup.py, + ] + before: | + [ \t]*"google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + after: " \"google-auth >= 2.23.3, <3.0.0,!=2.24.0,!=2.25.0\"," + count: 1 + - paths: [ + packages/google-cloud-automl/testing/constraints-3.10.txt + ] + before: | + google-auth==2.14.1 + after: | + google-auth==2.23.3 + count: 1 - paths: [ packages/google-cloud-automl/setup.py, ] @@ -256,6 +271,16 @@ replacements: after: | UNIT_TEST_EXTRAS: List[str] = ["pandas", "storage"] count: 1 + - paths: [ + packages/google-cloud-automl/noxfile.py, + ] + before: | + [ \t]*# Install all dependencies + [ \t]*session\.install\("-e", "\."\) + after: |2 + # Install all dependencies + session.install("-e", f".[{','.join(UNIT_TEST_EXTRAS)}]") + count: 2 - paths: [ packages/google-cloud-logging/noxfile.py, ] From a8c401f40d13f70e64abf8349c1fca01ad2eb7ad Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Fri, 15 May 2026 11:28:53 -0400 Subject: [PATCH 5/5] chore: adds generated files --- packages/google-cloud-automl/docs/conf.py | 4 +- .../google/cloud/automl_v1/__init__.py | 25 +---- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- .../google/cloud/automl_v1/types/io.py | 71 +++++++++----- .../google/cloud/automl_v1beta1/__init__.py | 25 +---- .../services/auto_ml/async_client.py | 38 ++++---- .../prediction_service/async_client.py | 6 +- packages/google-cloud-automl/noxfile.py | 8 +- ..._generated_auto_ml_create_dataset_async.py | 6 +- ...v1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...v1_generated_auto_ml_delete_model_async.py | 6 +- ...v1_generated_auto_ml_deploy_model_async.py | 6 +- ..._v1_generated_auto_ml_export_data_async.py | 6 +- ...v1_generated_auto_ml_export_model_async.py | 6 +- ..._v1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- ...a1_generated_auto_ml_create_model_async.py | 6 +- ..._generated_auto_ml_delete_dataset_async.py | 6 +- ...a1_generated_auto_ml_delete_model_async.py | 6 +- ...a1_generated_auto_ml_deploy_model_async.py | 6 +- ...ta1_generated_auto_ml_export_data_async.py | 6 +- ...auto_ml_export_evaluated_examples_async.py | 6 +- ...a1_generated_auto_ml_export_model_async.py | 6 +- ...ta1_generated_auto_ml_import_data_async.py | 6 +- ..._generated_auto_ml_undeploy_model_async.py | 6 +- ..._prediction_service_batch_predict_async.py | 6 +- packages/google-cloud-automl/setup.py | 13 ++- .../testing/constraints-3.10.txt | 21 +++-- .../testing/constraints-3.9.txt | 18 ---- .../unit/gapic/automl_v1/test_auto_ml.py | 68 +++++--------- .../automl_v1/test_prediction_service.py | 18 ++-- .../unit/gapic/automl_v1beta1/test_auto_ml.py | 92 +++++++------------ .../automl_v1beta1/test_prediction_service.py | 18 ++-- 36 files changed, 251 insertions(+), 338 deletions(-) delete mode 100644 packages/google-cloud-automl/testing/constraints-3.9.txt diff --git a/packages/google-cloud-automl/docs/conf.py b/packages/google-cloud-automl/docs/conf.py index e6d0f2d68e42..05a107396697 100644 --- a/packages/google-cloud-automl/docs/conf.py +++ b/packages/google-cloud-automl/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -83,7 +83,7 @@ # General information about the project. project = "google-cloud-automl" -copyright = "2025, Google, LLC" +copyright = "2026, Google, LLC" author = "Google APIs" # The version info for the project you're documenting, acts as replacement for diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py index 2968bc863430..60d64076048b 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,13 +21,7 @@ __version__ = package_version.__version__ -if sys.version_info >= (3, 8): # pragma: NO COVER - from importlib import metadata -else: # pragma: NO COVER - # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove - # this code path once we drop support for Python 3.7 - import importlib_metadata as metadata - +from importlib import metadata from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -149,28 +143,17 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: - import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1" - if sys.version_info < (3, 9): + if sys.version_info < (3, 10): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.9, and then update {_package_label}.", - FutureWarning, - ) - if sys.version_info[:2] == (3, 9): - warnings.warn( - f"You are using a Python version ({_py_version_str}) " - + f"which Google will stop supporting in {_package_label} in " - + "January 2026. Please " - + "upgrade to the latest Python version, or at " - + "least to Python 3.10, before then, and " - + f"then update {_package_label}.", + + f"least to Python 3.10, and then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py index a1e1e4366cce..a223d25a04a4 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -365,11 +365,11 @@ async def sample_create_dataset(): ) # Make the request - operation = client.create_dataset(request=request) + operation = await client.create_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -869,11 +869,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1016,11 +1016,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1168,11 +1168,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1424,11 +1424,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1796,11 +1796,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2064,11 +2064,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2205,11 +2205,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2350,11 +2350,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py index 565550a1576d..881cdbaf08f2 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -570,11 +570,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py index 26ec3699d57b..41262d1beb31 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1/types/io.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,9 +55,11 @@ class InputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision: + AutoML Vision + ^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ for @@ -98,7 +100,8 @@ class InputConfig(proto.Message): UNASSIGNED,gs://folder/image3.jpg,daisy UNASSIGNED,gs://folder/image4.jpg - Object Detection: + Object Detection + '''''''''''''''' See `Preparing your training data `__ @@ -148,9 +151,11 @@ class InputConfig(proto.Message): - AutoML Video Intelligence: + AutoML Video Intelligence + ^^^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ @@ -200,7 +205,8 @@ class InputConfig(proto.Message): gs://folder/vid2.avi,car,0,60.5 gs://folder/vid3.avi,,, - Object Tracking: + Object Tracking + ''''''''''''''' See `Preparing your training data `__ @@ -263,9 +269,11 @@ class InputConfig(proto.Message): gs://folder/video2.avi,car,1,0,.1,.9,,,.9,.1,, gs://folder/video2.avi,,,,,,,,,,, - AutoML Natural Language: + AutoML Natural Language + ^^^^^^^^^^^^^^^^^^^^^^^ - Entity Extraction: + Entity Extraction + ''''''''''''''''' See `Preparing your training data `__ for @@ -459,7 +467,8 @@ class InputConfig(proto.Message): }, ], - Classification: + Classification + '''''''''''''' See `Preparing your training data `__ @@ -511,7 +520,8 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,BadFood - Sentiment Analysis: + Sentiment Analysis + '''''''''''''''''' See `Preparing your training data `__ @@ -574,7 +584,8 @@ class InputConfig(proto.Message): TEST,gs://folder/document.pdf VALIDATE,gs://folder/text_files.zip,2 - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ See `Preparing your training data `__ for @@ -691,7 +702,8 @@ class InputConfig(proto.Message): semantic of the imported data, any string must be up to 25000 characters long. - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ ``schema_inference_version`` : (integer) This value must be supplied. The version of the algorithm to use for the @@ -724,9 +736,11 @@ class BatchPredictInputConfig(proto.Message): with non-terminal symbols defined near the end of this comment. The formats are: - AutoML Vision: + AutoML Vision + ^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -746,7 +760,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - Object Detection: + Object Detection + '''''''''''''''' One or more CSV files where each line is a single column: @@ -766,9 +781,11 @@ class BatchPredictInputConfig(proto.Message): gs://folder/image2.gif gs://folder/image3.png - AutoML Video Intelligence: + AutoML Video Intelligence + ^^^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -791,7 +808,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - Object Tracking: + Object Tracking + ''''''''''''''' One or more CSV files where each line is a single column: @@ -814,9 +832,11 @@ class BatchPredictInputConfig(proto.Message): gs://folder/video1.mp4,20,60 gs://folder/vid2.mov,0,inf - AutoML Natural Language: + AutoML Natural Language + ^^^^^^^^^^^^^^^^^^^^^^^ - Classification: + Classification + '''''''''''''' One or more CSV files where each line is a single column: @@ -837,7 +857,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Sentiment Analysis: + Sentiment Analysis + '''''''''''''''''' One or more CSV files where each line is a single column: @@ -858,7 +879,8 @@ class BatchPredictInputConfig(proto.Message): gs://folder/text2.pdf gs://folder/text3.tif - Entity Extraction: + Entity Extraction + ''''''''''''''''' One or more JSONL (JSON Lines) files that either provide inline text or documents. You can only use one format, either inline text or @@ -933,7 +955,8 @@ class BatchPredictInputConfig(proto.Message): } } - AutoML Tables: + AutoML Tables + ^^^^^^^^^^^^^ See `Preparing your training data `__ diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py index 310edefc5778..07baf5afcb7c 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,13 +21,7 @@ __version__ = package_version.__version__ -if sys.version_info >= (3, 8): # pragma: NO COVER - from importlib import metadata -else: # pragma: NO COVER - # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove - # this code path once we drop support for Python 3.7 - import importlib_metadata as metadata - +from importlib import metadata from .services.auto_ml import AutoMlAsyncClient, AutoMlClient from .services.prediction_service import ( @@ -195,28 +189,17 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: - import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.automl_v1beta1" - if sys.version_info < (3, 9): + if sys.version_info < (3, 10): warnings.warn( "You are using a non-supported Python version " + f"({_py_version_str}). Google will not post any further " + f"updates to {_package_label} supporting this Python version. " + "Please upgrade to the latest Python version, or at " - + f"least to Python 3.9, and then update {_package_label}.", - FutureWarning, - ) - if sys.version_info[:2] == (3, 9): - warnings.warn( - f"You are using a Python version ({_py_version_str}) " - + f"which Google will stop supporting in {_package_label} in " - + "January 2026. Please " - + "upgrade to the latest Python version, or at " - + "least to Python 3.10, before then, and " - + f"then update {_package_label}.", + + f"least to Python 3.10, and then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py index bbc60a196714..340116618550 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/auto_ml/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -859,11 +859,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1002,11 +1002,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -1150,11 +1150,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2120,11 +2120,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2492,11 +2492,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2639,11 +2639,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2780,11 +2780,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -2922,11 +2922,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) @@ -3081,11 +3081,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = client.export_evaluated_examples(request=request) + operation = await client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py index 1b7f0dc86888..48806d2da5aa 100644 --- a/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py +++ b/packages/google-cloud-automl/google/cloud/automl_v1beta1/services/prediction_service/async_client.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -536,11 +536,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/noxfile.py b/packages/google-cloud-automl/noxfile.py index 4e126e3abe91..b982fec61a9d 100644 --- a/packages/google-cloud-automl/noxfile.py +++ b/packages/google-cloud-automl/noxfile.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,7 +31,6 @@ LINT_PATHS.append("samples") ALL_PYTHON = [ - "3.9", "3.10", "3.11", "3.12", @@ -391,7 +390,6 @@ def docs(session): shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( "sphinx-build", - "-W", # warnings as errors "-T", # show full traceback on exception "-N", # no colors "-b", @@ -464,7 +462,7 @@ def prerelease_deps(session, protobuf_implementation): """ # Install all dependencies - session.install("-e", ".") + session.install("-e", f".[{','.join(UNIT_TEST_EXTRAS)}]") # Install dependencies for the unit test environment unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES @@ -557,7 +555,7 @@ def core_deps_from_source(session, protobuf_implementation): """ # Install all dependencies - session.install("-e", ".") + session.install("-e", f".[{','.join(UNIT_TEST_EXTRAS)}]") # Install dependencies for the unit test environment unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py index ebdce3d3ca7e..e39d2a112f0a 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -53,11 +53,11 @@ async def sample_create_dataset(): ) # Make the request - operation = client.create_dataset(request=request) + operation = await client.create_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py index 3f05c7b83e4d..7f3576f0ca4f 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py index 4f79dbb43392..bf73628b9b51 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py index 994476f3e411..6ec9f3a4a899 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py index 2b6aa5e36da0..70df9ca4f525 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py index eda683a06cd8..823afa076c57 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py index babad52490b0..96c993fe4da2 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py index 0df6eba7ab30..ab0f9b6ffd0c 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -48,11 +48,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py index 91b9a168f270..1e11c6ac8086 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py index 5f19c4226683..7d85d80ed7ab 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -52,11 +52,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py index 76b87740d080..b4be09c5429a 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_create_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_create_model(): ) # Make the request - operation = client.create_model(request=request) + operation = await client.create_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py index a4c6e1d7ec82..91aec7607d10 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_dataset_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_dataset(): ) # Make the request - operation = client.delete_dataset(request=request) + operation = await client.delete_dataset(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py index c98857b95be5..bec81527b747 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_delete_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_delete_model(): ) # Make the request - operation = client.delete_model(request=request) + operation = await client.delete_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py index f4de388af10e..aa5c2f3ef761 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_deploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_deploy_model(): ) # Make the request - operation = client.deploy_model(request=request) + operation = await client.deploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py index a30f6af27324..2c98e3d4e1d4 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_data(): ) # Make the request - operation = client.export_data(request=request) + operation = await client.export_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py index b970f50ac5be..7ed13eb71741 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_evaluated_examples_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_evaluated_examples(): ) # Make the request - operation = client.export_evaluated_examples(request=request) + operation = await client.export_evaluated_examples(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py index 65ee458d4dd8..d95878ad49ec 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_export_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_export_model(): ) # Make the request - operation = client.export_model(request=request) + operation = await client.export_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py index e28851a3899e..23c576be2c00 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_import_data_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_import_data(): ) # Make the request - operation = client.import_data(request=request) + operation = await client.import_data(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py index 131f7e327dcf..df2160110cfe 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_auto_ml_undeploy_model_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_undeploy_model(): ) # Make the request - operation = client.undeploy_model(request=request) + operation = await client.undeploy_model(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py index 18600baf725f..b7af37fbd6e3 100644 --- a/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py +++ b/packages/google-cloud-automl/samples/generated_samples/automl_v1beta1_generated_prediction_service_batch_predict_async.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -44,11 +44,11 @@ async def sample_batch_predict(): ) # Make the request - operation = client.batch_predict(request=request) + operation = await client.batch_predict(request=request) print("Waiting for operation to complete...") - response = (await operation).result() + response = await operation.result() # Handle the response print(response) diff --git a/packages/google-cloud-automl/setup.py b/packages/google-cloud-automl/setup.py index d92d1981fe09..eb746e8f999e 100644 --- a/packages/google-cloud-automl/setup.py +++ b/packages/google-cloud-automl/setup.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -39,11 +39,11 @@ release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-api-core[grpc] >= 2.11.0, <3.0.0", + "google-api-core[grpc] >= 2.17.1, <3.0.0", # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 - "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", - "grpcio >= 1.33.2, < 2.0.0", + "google-auth >= 2.23.3, <3.0.0,!=2.24.0,!=2.25.0", + "grpcio >= 1.44.0, < 2.0.0", "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", @@ -76,7 +76,7 @@ long_description=readme, author="Google LLC", author_email="googleapis-packages@google.com", - license="Apache 2.0", + license="Apache-2.0", url=url, classifiers=[ release_status, @@ -84,7 +84,6 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -95,7 +94,7 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, - python_requires=">=3.9", + python_requires=">=3.10", install_requires=dependencies, extras_require=extras, include_package_data=True, diff --git a/packages/google-cloud-automl/testing/constraints-3.10.txt b/packages/google-cloud-automl/testing/constraints-3.10.txt index 7599dea499ed..fa97caa0a2a6 100644 --- a/packages/google-cloud-automl/testing/constraints-3.10.txt +++ b/packages/google-cloud-automl/testing/constraints-3.10.txt @@ -1,10 +1,11 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -google-auth -grpcio -proto-plus -protobuf -# cryptography is a direct dependency of google-auth -cryptography +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file, +# pinning their versions to their lower bounds. +# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# then this file should have google-cloud-foo==1.14.0 +google-api-core==2.17.1 +google-auth==2.23.3 +grpcio==1.44.0 +proto-plus==1.22.3 +protobuf==4.25.8 diff --git a/packages/google-cloud-automl/testing/constraints-3.9.txt b/packages/google-cloud-automl/testing/constraints-3.9.txt deleted file mode 100644 index 60e67851a5fa..000000000000 --- a/packages/google-cloud-automl/testing/constraints-3.9.txt +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file, -# pinning their versions to their lower bounds. -# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", -# then this file should have google-cloud-foo==1.14.0 -google-api-core==2.21.0 -google-cloud-storage==2.14.0 -libcst==0.2.5 -pandas==1.1.3 -# numpy is a dependency of pandas -numpy==1.19.3 -google-auth==2.35.0 -# TODO(https://github.com/googleapis/gapic-generator-python/issues/2453) -# Add the minimum supported version of grpcio to constraints files -proto-plus==1.22.3 -protobuf==4.25.8 diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py index 85020d51d6c8..879cab860a75 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2474,11 +2468,7 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_datasets(request={}) - ).pages: + async for page_ in (await client.list_datasets(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5440,11 +5430,7 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_models(request={}) - ).pages: + async for page_ in (await client.list_models(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8058,11 +8044,7 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_model_evaluations(request={}) - ).pages: + async for page_ in (await client.list_model_evaluations(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -8176,7 +8158,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_dataset_rest_unset_required_fields(): @@ -8367,7 +8349,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_dataset_rest_unset_required_fields(): @@ -8550,7 +8532,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_datasets_rest_unset_required_fields(): @@ -8793,7 +8775,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_dataset_rest_unset_required_fields(): @@ -8990,7 +8972,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_dataset_rest_unset_required_fields(): @@ -9165,7 +9147,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_import_data_rest_unset_required_fields(): @@ -9355,7 +9337,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_data_rest_unset_required_fields(): @@ -9553,7 +9535,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_annotation_spec_rest_unset_required_fields(): @@ -9733,7 +9715,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_model_rest_unset_required_fields(): @@ -9924,7 +9906,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_rest_unset_required_fields(): @@ -10107,7 +10089,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_models_rest_unset_required_fields(): @@ -10353,7 +10335,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_model_rest_unset_required_fields(): @@ -10524,7 +10506,7 @@ def test_update_model_rest_required_fields(request_type=service.UpdateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_model_rest_unset_required_fields(): @@ -10722,7 +10704,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_deploy_model_rest_unset_required_fields(): @@ -10898,7 +10880,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_undeploy_model_rest_unset_required_fields(): @@ -11074,7 +11056,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_model_rest_unset_required_fields(): @@ -11272,7 +11254,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_evaluation_rest_unset_required_fields(): @@ -11478,7 +11460,7 @@ def test_list_model_evaluations_rest_required_fields( ("$alt", "json;enum-encoding=int"), ] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py index 604b4a7e6d94..150a650704b4 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2210,7 +2204,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_predict_rest_unset_required_fields(): @@ -2406,7 +2400,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_batch_predict_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py index 17adbaf502f2..bfdfcb0279fc 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_auto_ml.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2491,11 +2485,7 @@ async def test_list_datasets_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_datasets(request={}) - ).pages: + async for page_ in (await client.list_datasets(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -5098,11 +5088,7 @@ async def test_list_table_specs_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_table_specs(request={}) - ).pages: + async for page_ in (await client.list_table_specs(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -6329,11 +6315,7 @@ async def test_list_column_specs_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_column_specs(request={}) - ).pages: + async for page_ in (await client.list_column_specs(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -7885,11 +7867,7 @@ async def test_list_models_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_models(request={}) - ).pages: + async for page_ in (await client.list_models(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10504,11 +10482,7 @@ async def test_list_model_evaluations_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_model_evaluations(request={}) - ).pages: + async for page_ in (await client.list_model_evaluations(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -10621,7 +10595,7 @@ def test_create_dataset_rest_required_fields(request_type=service.CreateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_dataset_rest_unset_required_fields(): @@ -10815,7 +10789,7 @@ def test_get_dataset_rest_required_fields(request_type=service.GetDatasetRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_dataset_rest_unset_required_fields(): @@ -10999,7 +10973,7 @@ def test_list_datasets_rest_required_fields(request_type=service.ListDatasetsReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_datasets_rest_unset_required_fields(): @@ -11243,7 +11217,7 @@ def test_update_dataset_rest_required_fields(request_type=service.UpdateDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_dataset_rest_unset_required_fields(): @@ -11430,7 +11404,7 @@ def test_delete_dataset_rest_required_fields(request_type=service.DeleteDatasetR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_dataset_rest_unset_required_fields(): @@ -11606,7 +11580,7 @@ def test_import_data_rest_required_fields(request_type=service.ImportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_import_data_rest_unset_required_fields(): @@ -11796,7 +11770,7 @@ def test_export_data_rest_required_fields(request_type=service.ExportDataRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_data_rest_unset_required_fields(): @@ -11994,7 +11968,7 @@ def test_get_annotation_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_annotation_spec_rest_unset_required_fields(): @@ -12174,7 +12148,7 @@ def test_get_table_spec_rest_required_fields(request_type=service.GetTableSpecRe expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_table_spec_rest_unset_required_fields(): @@ -12365,7 +12339,7 @@ def test_list_table_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_table_specs_rest_unset_required_fields(): @@ -12618,7 +12592,7 @@ def test_update_table_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_table_spec_rest_unset_required_fields(): @@ -12802,7 +12776,7 @@ def test_get_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_column_spec_rest_unset_required_fields(): @@ -12993,7 +12967,7 @@ def test_list_column_specs_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_column_specs_rest_unset_required_fields(): @@ -13248,7 +13222,7 @@ def test_update_column_spec_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_update_column_spec_rest_unset_required_fields(): @@ -13430,7 +13404,7 @@ def test_create_model_rest_required_fields(request_type=service.CreateModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_create_model_rest_unset_required_fields(): @@ -13622,7 +13596,7 @@ def test_get_model_rest_required_fields(request_type=service.GetModelRequest): expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_rest_unset_required_fields(): @@ -13806,7 +13780,7 @@ def test_list_models_rest_required_fields(request_type=service.ListModelsRequest expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_models_rest_unset_required_fields(): @@ -14053,7 +14027,7 @@ def test_delete_model_rest_required_fields(request_type=service.DeleteModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_delete_model_rest_unset_required_fields(): @@ -14229,7 +14203,7 @@ def test_deploy_model_rest_required_fields(request_type=service.DeployModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_deploy_model_rest_unset_required_fields(): @@ -14405,7 +14379,7 @@ def test_undeploy_model_rest_required_fields(request_type=service.UndeployModelR expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_undeploy_model_rest_unset_required_fields(): @@ -14581,7 +14555,7 @@ def test_export_model_rest_required_fields(request_type=service.ExportModelReque expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_model_rest_unset_required_fields(): @@ -14782,7 +14756,7 @@ def test_export_evaluated_examples_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_export_evaluated_examples_rest_unset_required_fields(): @@ -14980,7 +14954,7 @@ def test_get_model_evaluation_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_get_model_evaluation_rest_unset_required_fields(): @@ -15173,7 +15147,7 @@ def test_list_model_evaluations_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_list_model_evaluations_rest_unset_required_fields(): diff --git a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py index 5761dae4fe1f..82e3197ef322 100644 --- a/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py +++ b/packages/google-cloud-automl/tests/unit/gapic/automl_v1beta1/test_prediction_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import AsyncIterable, Iterable, Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2211,7 +2205,7 @@ def test_predict_rest_required_fields(request_type=prediction_service.PredictReq expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_predict_rest_unset_required_fields(): @@ -2407,7 +2401,7 @@ def test_batch_predict_rest_required_fields( expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + assert sorted(expected_params) == sorted(actual_params) def test_batch_predict_rest_unset_required_fields():