diff --git a/Dockerfile.generator b/Dockerfile.generator new file mode 100644 index 000000000000..5b85c8c914dd --- /dev/null +++ b/Dockerfile.generator @@ -0,0 +1,60 @@ +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +FROM python:3.13.3-slim-bullseye + +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y \ + # TODO: This is only temporary. git is only needed to install packages from Github. We should use the artifact from PyPI. + git \ + pandoc \ + wget \ + zip \ + && apt-get clean autoclean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /var/cache/apt/archives/*.deb + +# Download/install protoc +RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v25.3/protoc-25.3-linux-x86_64.zip +RUN unzip protoc-25.3-linux-x86_64.zip -d protoc +RUN mv protoc/bin/* /usr/local/bin/ +RUN mv protoc/include/* /usr/local/include/ +RUN chmod +x /usr/local/bin/protoc +ENV PATH="/usr/bin:${PATH}" + +# Configure user to avoid running as root +env USER myuser + +WORKDIR / + +# TODO: move to requirements.txt file +RUN pip3 install click black==23.7.0 isort==5.11.0 +# TODO: This is only temporary. We should use the artifact from PyPI via a requirements.txt file +RUN pip3 install git+https://github.com/googleapis/gapic-generator-python.git@1pp-prototype-v1.25.0 + +# Copy Python Generator CLI +COPY tools/python_generator_cli /python_generator_cli +ENV HOME=/python_generator_cli + +COPY generator-input /generator-input + +# Update permissions so non-root users won't see errors. +RUN find /python_generator_cli -exec chmod a+rw {} \; +RUN find /python_generator_cli -type d -exec chmod a+x {} \; +RUN find /generator-input -exec chmod a+rw {} \; +RUN find /generator-input -type d -exec chmod a+x {} \; + +ENTRYPOINT [ "python3", "/python_generator_cli/cli.py" ] diff --git a/generator-input/apis.json b/generator-input/apis.json new file mode 100644 index 000000000000..9625c0e3f173 --- /dev/null +++ b/generator-input/apis.json @@ -0,0 +1,6268 @@ +{ + "apis": [ + { + "apiPath": "." + }, + { + "apiPath": "gapic/metadata" + }, + { + "apiPath": "grafeas" + }, + { + "apiPath": "grafeas/v1", + "documentation-name": "grafeas", + "documentation-uri": "https://grafeas.io", + "gapic-version": "1.15.0", + "id": "grafeas", + "python-gapic-namespace": "grafeas", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "grafeas_grpc_service_config.json", + "service-yaml": "grafeas_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "grafeas" + }, + { + "apiPath": "google" + }, + { + "apiPath": "google/ai/generativelanguage" + }, + { + "apiPath": "google/ai/generativelanguage/v1beta2", + "default-proto-package": "google.ai.generativelanguage.v1beta", + "documentation-name": "generativelanguage", + "gapic-version": "0.6.18", + "id": "google-ai-generativelanguage", + "reference-doc-includes": "generativelanguage_v1+generativelanguage_v1beta3+generativelanguage_v1beta2+generativelanguage_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "generativeai_grpc_service_config.json", + "service-yaml": "generativelanguage_v1beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/ai/generativelanguage/v1alpha", + "default-proto-package": "google.ai.generativelanguage.v1beta", + "documentation-name": "generativelanguage", + "gapic-version": "0.6.18", + "id": "google-ai-generativelanguage", + "reference-doc-includes": "generativelanguage_v1+generativelanguage_v1beta3+generativelanguage_v1beta2+generativelanguage_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "generativeai_grpc_service_config.json", + "service-yaml": "generativelanguage_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/ai/generativelanguage/v1", + "default-proto-package": "google.ai.generativelanguage.v1beta", + "documentation-name": "generativelanguage", + "gapic-version": "0.6.18", + "id": "google-ai-generativelanguage", + "reference-doc-includes": "generativelanguage_v1+generativelanguage_v1beta3+generativelanguage_v1beta2+generativelanguage_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "generativeai_grpc_service_config.json", + "service-yaml": "generativelanguage_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/ai/generativelanguage/v1beta3", + "default-proto-package": "google.ai.generativelanguage.v1beta", + "documentation-name": "generativelanguage", + "gapic-version": "0.6.18", + "id": "google-ai-generativelanguage", + "reference-doc-includes": "generativelanguage_v1+generativelanguage_v1beta3+generativelanguage_v1beta2+generativelanguage_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "generativeai_grpc_service_config.json", + "service-yaml": "generativelanguage_v1beta3.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/ai/generativelanguage/v1beta", + "default-proto-package": "google.ai.generativelanguage.v1beta", + "documentation-name": "generativelanguage", + "gapic-version": "0.6.18", + "id": "google-ai-generativelanguage", + "reference-doc-includes": "generativelanguage_v1+generativelanguage_v1beta3+generativelanguage_v1beta2+generativelanguage_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "generativeai_grpc_service_config.json", + "service-yaml": "generativelanguage_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/example/library" + }, + { + "apiPath": "google/example/library/v1", + "rest-numeric-enums": "True", + "retry-config": "library_grpc_service_config.json", + "transport": "grpc+rest" + }, + { + "apiPath": "google/home/graph" + }, + { + "apiPath": "google/home/graph/v1", + "rest-numeric-enums": "True", + "retry-config": "homegraph_grpc_service_config.json", + "service-yaml": "homegraph_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/home/enterprise/sdm/v1", + "rest-numeric-enums": "True", + "retry-config": "smart_device_management_grpc_service_config.json", + "service-yaml": "smartdevicemanagement_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/storagetransfer" + }, + { + "apiPath": "google/storagetransfer/logging" + }, + { + "apiPath": "google/storagetransfer/v1", + "documentation-name": "storagetransfer", + "documentation-uri": "https://cloud.google.com/storage-transfer/", + "gapic-version": "1.17.0", + "id": "google-cloud-storage-transfer", + "python-gapic-name": "storage_transfer", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "storagetransfer_grpc_service_config.json", + "service-yaml": "storagetransfer_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-storage-transfer" + }, + { + "apiPath": "google/logging" + }, + { + "apiPath": "google/logging/type" + }, + { + "apiPath": "google/logging/v2", + "python-gapic-name": "logging", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "logging_grpc_service_config.json", + "service-yaml": "logging_v2.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/shopping/merchant/products" + }, + { + "apiPath": "google/shopping/merchant/products/v1beta", + "documentation-name": "google-shopping-merchant-products", + "gapic-version": "0.2.5", + "id": "google-shopping-merchant-products", + "python-gapic-name": "merchant_products", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "products_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/lfp" + }, + { + "apiPath": "google/shopping/merchant/lfp/v1beta", + "documentation-name": "google-shopping-merchant-lfp", + "gapic-version": "0.1.10", + "id": "google-shopping-merchant-lfp", + "python-gapic-name": "merchant_lfp", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "lfp_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/reports" + }, + { + "apiPath": "google/shopping/merchant/reports/v1beta", + "documentation-name": "google-shopping-merchant-reports", + "gapic-version": "0.1.15", + "id": "google-shopping-merchant-reports", + "python-gapic-name": "merchant_reports", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "reports_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/conversions" + }, + { + "apiPath": "google/shopping/merchant/conversions/v1beta", + "documentation-name": "google-shopping-merchant-conversions", + "gapic-version": "0.1.9", + "id": "google-shopping-merchant-conversions", + "python-gapic-name": "merchant_conversions", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "conversions_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/productstudio/v1alpha", + "documentation-name": "google-shopping-merchant-productstudio", + "gapic-version": "0.1.0", + "id": "google-shopping-merchant-productstudio", + "python-gapic-name": "merchant_productstudio", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "productstudio_grpc_service_config.json", + "service-yaml": "merchantapi_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/issueresolution" + }, + { + "apiPath": "google/shopping/merchant/issueresolution/v1beta", + "documentation-name": "google-shopping-merchant-issueresolution", + "gapic-version": "0.1.0", + "id": "google-shopping-merchant-issueresolution", + "python-gapic-name": "merchant_issueresolution", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "issueresolution_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/ordertracking" + }, + { + "apiPath": "google/shopping/merchant/ordertracking/v1beta", + "documentation-name": "google-shopping-merchant-ordertracking", + "gapic-version": "0.1.0", + "id": "google-shopping-merchant-ordertracking", + "python-gapic-name": "merchant_ordertracking", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "ordertracking_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/inventories" + }, + { + "apiPath": "google/shopping/merchant/inventories/v1beta", + "documentation-name": "google-shopping-merchant-inventories", + "gapic-version": "0.1.15", + "id": "google-shopping-merchant-inventories", + "python-gapic-name": "merchant_inventories", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "inventories_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/notifications" + }, + { + "apiPath": "google/shopping/merchant/notifications/v1beta", + "documentation-name": "google-shopping-merchant-notifications", + "gapic-version": "0.1.8", + "id": "google-shopping-merchant-notifications", + "python-gapic-name": "merchant_notifications", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "notifications_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/accounts" + }, + { + "apiPath": "google/shopping/merchant/accounts/v1beta", + "documentation-name": "google-shopping-merchant-accounts", + "gapic-version": "0.3.4", + "id": "google-shopping-merchant-accounts", + "python-gapic-name": "merchant_accounts", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "accounts_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/quota" + }, + { + "apiPath": "google/shopping/merchant/quota/v1beta", + "documentation-name": "google-shopping-merchant-quota", + "gapic-version": "0.1.8", + "id": "google-shopping-merchant-quota", + "python-gapic-name": "merchant_quota", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "quota_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/reviews" + }, + { + "apiPath": "google/shopping/merchant/reviews/v1beta", + "documentation-name": "google-shopping-merchant-reviews", + "gapic-version": "0.1.3", + "id": "google-shopping-merchant-reviews", + "python-gapic-name": "merchant_reviews", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "reviews_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/promotions" + }, + { + "apiPath": "google/shopping/merchant/promotions/v1beta", + "documentation-name": "google-shopping-merchant-promotions", + "gapic-version": "0.1.8", + "id": "google-shopping-merchant-promotions", + "python-gapic-name": "merchant_promotions", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "promotions_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/merchant/datasources" + }, + { + "apiPath": "google/shopping/merchant/datasources/v1beta", + "documentation-name": "google-shopping-merchant-datasources", + "gapic-version": "0.1.10", + "id": "google-shopping-merchant-datasources", + "python-gapic-name": "merchant_datasources", + "python-gapic-namespace": "google.shopping", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "datasources_grpc_service_config.json", + "service-yaml": "merchantapi_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "", + "apiPath": "google/shopping/type", + "documentation-name": "google-shopping-type", + "documentation-uri": "https://developers.google.com/merchant/api", + "gapic-version": "0.1.12", + "id": "google-shopping-type", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Shopping Type Protos", + "transport": "grpc+rest" + }, + { + "apiPath": "google/shopping/css" + }, + { + "apiPath": "google/shopping/css/v1", + "documentation-name": "google-shopping-css", + "gapic-version": "0.1.17", + "id": "google-shopping-css", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "css_grpc_service_config.json", + "service-yaml": "css_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/search/partnerdataingestion/logging/v1" + }, + { + "apiPath": "google/chat" + }, + { + "apiPath": "google/chat/logging/v1" + }, + { + "apiPath": "google/chat/v1", + "documentation-name": "google-apps-chat", + "gapic-version": "0.2.6", + "id": "google-apps-chat", + "python-gapic-namespace": "google.apps", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "chat_grpc_service_config.json", + "service-yaml": "chat_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-apps-chat" + }, + { + "apiPath": "google/type" + }, + { + "apiPath": "google/dataflow" + }, + { + "apiPath": "google/dataflow/v1beta3", + "documentation-name": "dataflow", + "documentation-uri": "https://cloud.google.com/dataflow/", + "gapic-version": "0.9.0", + "id": "google-cloud-dataflow-client", + "python-gapic-name": "dataflow", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "dataflow_grpc_service_config.json", + "service-yaml": "dataflow_v1beta3.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dataflow-client" + }, + { + "apiPath": "google/ads/admob" + }, + { + "apiPath": "google/ads/admob/v1", + "rest-numeric-enums": "True", + "transport": "rest" + }, + { + "apiPath": "google/ads/admanager" + }, + { + "apiPath": "google/ads/admanager/v1", + "documentation-name": "google-ads-admanager", + "gapic-version": "0.2.6", + "id": "google-ads-admanager", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "admanager_grpc_service_config.json", + "service-yaml": "admanager_v1.yaml", + "transport": "rest" + }, + { + "apiPath": "google/ads/searchads360/v0", + "python-gapic-name": "searchads360", + "retry-config": "searchads360_grpc_service_config.json" + }, + { + "apiPath": "google/ads/searchads360/v0/common" + }, + { + "apiPath": "google/ads/searchads360/v0/enums" + }, + { + "apiPath": "google/ads/searchads360/v0/services" + }, + { + "apiPath": "google/ads/searchads360/v0/resources" + }, + { + "apiPath": "google/ads/googleads/v20", + "python-gapic-name": "googleads", + "retry-config": "googleads_grpc_service_config.json", + "service-yaml": "googleads_v20.yaml", + "warehouse-package-name": "google-ads" + }, + { + "apiPath": "google/ads/googleads/v20/errors" + }, + { + "apiPath": "google/ads/googleads/v20/common" + }, + { + "apiPath": "google/ads/googleads/v20/enums" + }, + { + "apiPath": "google/ads/googleads/v20/services" + }, + { + "apiPath": "google/ads/googleads/v20/resources" + }, + { + "apiPath": "google/ads/googleads/v19", + "python-gapic-name": "googleads", + "retry-config": "googleads_grpc_service_config.json", + "service-yaml": "googleads_v19.yaml", + "warehouse-package-name": "google-ads" + }, + { + "apiPath": "google/ads/googleads/v19/errors" + }, + { + "apiPath": "google/ads/googleads/v19/common" + }, + { + "apiPath": "google/ads/googleads/v19/enums" + }, + { + "apiPath": "google/ads/googleads/v19/services" + }, + { + "apiPath": "google/ads/googleads/v19/resources" + }, + { + "apiPath": "google/ads/googleads/v18", + "python-gapic-name": "googleads", + "retry-config": "googleads_grpc_service_config.json", + "service-yaml": "googleads_v18.yaml", + "warehouse-package-name": "google-ads" + }, + { + "apiPath": "google/ads/googleads/v18/errors" + }, + { + "apiPath": "google/ads/googleads/v18/common" + }, + { + "apiPath": "google/ads/googleads/v18/enums" + }, + { + "apiPath": "google/ads/googleads/v18/services" + }, + { + "apiPath": "google/ads/googleads/v18/resources" + }, + { + "apiPath": "google/chromeos/uidetection/v1", + "rest-numeric-enums": "True", + "retry-config": "ui_detection_grpc_service_config.json", + "service-yaml": "chromeosuidetection_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/chromeos/moblab" + }, + { + "apiPath": "google/chromeos/moblab/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "moblab_grpc_service_config.json", + "service-yaml": "chromeosmoblab_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud" + }, + { + "apiPath": "google/cloud/cloudcontrolspartner" + }, + { + "apiPath": "google/cloud/cloudcontrolspartner/v1", + "default-proto-package": "google.cloud.cloudcontrolspartner.v1", + "documentation-name": "google-cloud-cloudcontrolspartner", + "gapic-version": "0.2.7", + "id": "google-cloud-cloudcontrolspartner", + "reference-doc-includes": "cloudcontrolspartner_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "cloudcontrolspartner_v1_grpc_service_config.json", + "service-yaml": "cloudcontrolspartner_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/cloudcontrolspartner/v1beta", + "default-proto-package": "google.cloud.cloudcontrolspartner.v1", + "documentation-name": "google-cloud-cloudcontrolspartner", + "gapic-version": "0.2.7", + "id": "google-cloud-cloudcontrolspartner", + "reference-doc-includes": "cloudcontrolspartner_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "cloudcontrolspartner_v1beta_grpc_service_config.json", + "service-yaml": "cloudcontrolspartner_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "Stores, manages, and secures access to application secrets.", + "apiPath": "google/cloud/secrets/v1beta1", + "default-proto-package": "google.cloud.secretmanager.v1", + "documentation-name": "secretmanager", + "documentation-uri": "https://cloud.google.com/secret-manager/", + "gapic-version": "2.24.0", + "id": "google-cloud-secret-manager", + "python-gapic-name": "secretmanager", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "secretmanager_v1beta2+secrets_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "secretmanager_grpc_service_config.json", + "title": "Secret Manager", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gdchardwaremanagement" + }, + { + "api-description": "Google Distributed Cloud connected allows you to run Kubernetes clusters on dedicated hardware provided and maintained by Google that is separate from the Google Cloud data center.", + "apiPath": "google/cloud/gdchardwaremanagement/v1alpha", + "documentation-name": "google-cloud-gdchardwaremanagement", + "gapic-version": "0.1.12", + "id": "google-cloud-gdchardwaremanagement", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "gdchardwaremanagement_v1alpha_grpc_service_config.json", + "service-yaml": "gdchardwaremanagement_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/iot" + }, + { + "apiPath": "google/cloud/iot/v1", + "rest-numeric-enums": "True", + "retry-config": "cloudiot_grpc_service_config.json", + "service-yaml": "cloudiot_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/retail" + }, + { + "apiPath": "google/cloud/retail/v2beta", + "default-proto-package": "google.cloud.retail.v2", + "documentation-name": "retail", + "documentation-uri": "https://cloud.google.com/retail/docs/", + "gapic-version": "2.2.0", + "id": "google-cloud-retail", + "reference-doc-includes": "retail_v2alpha+retail_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "retail_grpc_service_config.json", + "service-yaml": "retail_v2beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/retail/v2alpha", + "default-proto-package": "google.cloud.retail.v2", + "documentation-name": "retail", + "documentation-uri": "https://cloud.google.com/retail/docs/", + "gapic-version": "2.2.0", + "id": "google-cloud-retail", + "reference-doc-includes": "retail_v2alpha+retail_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "retail_grpc_service_config.json", + "service-yaml": "retail_v2alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/retail/v2", + "default-proto-package": "google.cloud.retail.v2", + "documentation-name": "retail", + "documentation-uri": "https://cloud.google.com/retail/docs/", + "gapic-version": "2.2.0", + "id": "google-cloud-retail", + "reference-doc-includes": "retail_v2alpha+retail_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "retail_grpc_service_config.json", + "service-yaml": "retail_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/videointelligence" + }, + { + "apiPath": "google/cloud/videointelligence/v1p1beta1", + "default-proto-package": "google.cloud.videointelligence.v1", + "documentation-name": "videointelligence", + "documentation-uri": "https://cloud.google.com/video-intelligence/docs/", + "gapic-version": "2.16.2", + "id": "google-cloud-videointelligence", + "reference-doc-includes": "videointelligence_v1p2beta1+videointelligence_v1p3beta1+videointelligence_v1beta2+videointelligence_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "videointelligence_grpc_service_config.json", + "service-yaml": "videointelligence_v1p1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/videointelligence/v1beta2", + "default-proto-package": "google.cloud.videointelligence.v1", + "documentation-name": "videointelligence", + "documentation-uri": "https://cloud.google.com/video-intelligence/docs/", + "gapic-version": "2.16.2", + "id": "google-cloud-videointelligence", + "reference-doc-includes": "videointelligence_v1p2beta1+videointelligence_v1p3beta1+videointelligence_v1beta2+videointelligence_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "videointelligence_grpc_service_config.json", + "service-yaml": "videointelligence_v1beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/videointelligence/v1p3beta1", + "default-proto-package": "google.cloud.videointelligence.v1", + "documentation-name": "videointelligence", + "documentation-uri": "https://cloud.google.com/video-intelligence/docs/", + "gapic-version": "2.16.2", + "id": "google-cloud-videointelligence", + "reference-doc-includes": "videointelligence_v1p2beta1+videointelligence_v1p3beta1+videointelligence_v1beta2+videointelligence_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "videointelligence_grpc_service_config.json", + "service-yaml": "videointelligence_v1p3beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/videointelligence/v1", + "default-proto-package": "google.cloud.videointelligence.v1", + "documentation-name": "videointelligence", + "documentation-uri": "https://cloud.google.com/video-intelligence/docs/", + "gapic-version": "2.16.2", + "id": "google-cloud-videointelligence", + "reference-doc-includes": "videointelligence_v1p2beta1+videointelligence_v1p3beta1+videointelligence_v1beta2+videointelligence_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "videointelligence_grpc_service_config.json", + "service-yaml": "videointelligence_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/videointelligence/v1p2beta1", + "default-proto-package": "google.cloud.videointelligence.v1", + "documentation-name": "videointelligence", + "documentation-uri": "https://cloud.google.com/video-intelligence/docs/", + "gapic-version": "2.16.2", + "id": "google-cloud-videointelligence", + "reference-doc-includes": "videointelligence_v1p2beta1+videointelligence_v1p3beta1+videointelligence_v1beta2+videointelligence_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "videointelligence_grpc_service_config.json", + "service-yaml": "videointelligence_v1p2beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gkeconnect/gateway" + }, + { + "apiPath": "google/cloud/gkeconnect/gateway/v1beta1", + "default-proto-package": "google.cloud.gkeconnect.gateway.v1", + "documentation-name": "connectgateway", + "gapic-version": "0.10.4", + "id": "google-cloud-gke-connect-gateway", + "reference-doc-includes": "gateway_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "connectgateway_v1beta1_grpc_service_config.json", + "service-yaml": "connectgateway_v1beta1.yaml", + "transport": "rest", + "warehouse-package-name": "google-cloud-gke-connect-gateway" + }, + { + "apiPath": "google/cloud/gkeconnect/gateway/v1", + "default-proto-package": "google.cloud.gkeconnect.gateway.v1", + "documentation-name": "connectgateway", + "gapic-version": "0.10.4", + "id": "google-cloud-gke-connect-gateway", + "reference-doc-includes": "gateway_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "connectgateway_v1_grpc_service_config.json", + "service-yaml": "connectgateway_v1.yaml", + "transport": "rest", + "warehouse-package-name": "google-cloud-gke-connect-gateway" + }, + { + "apiPath": "google/cloud/devicestreaming" + }, + { + "apiPath": "google/cloud/devicestreaming/v1", + "documentation-name": "google-cloud-devicestreaming", + "gapic-version": "0.1.0", + "id": "google-cloud-devicestreaming", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "devicestreaming_grpc_service_config.json", + "service-yaml": "devicestreaming_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/policysimulator" + }, + { + "apiPath": "google/cloud/policysimulator/v1", + "documentation-name": "policysimulator", + "gapic-version": "0.1.14", + "id": "google-cloud-policysimulator", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "policysimulator_v1_grpc_service_config.json", + "service-yaml": "policysimulator_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gsuiteaddons" + }, + { + "apiPath": "google/cloud/gsuiteaddons/logging/v1" + }, + { + "api-description": "Add-ons are customized applications that integrate with Google Workspace applications.", + "apiPath": "google/cloud/gsuiteaddons/v1", + "documentation-name": "gsuiteaddons", + "documentation-uri": "https://developers.google.com/workspace/add-ons/overview", + "gapic-version": "0.3.17", + "id": "google-cloud-gsuiteaddons", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "gsuiteaddons_grpc_service_config.json", + "service-yaml": "gsuiteaddons_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/recaptchaenterprise" + }, + { + "apiPath": "google/cloud/recaptchaenterprise/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "recaptchaenterprise_grpc_service_config.json", + "service-yaml": "recaptchaenterprise_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-recaptcha-enterprise" + }, + { + "apiPath": "google/cloud/recaptchaenterprise/v1", + "documentation-name": "recaptchaenterprise", + "documentation-uri": "https://cloud.google.com/recaptcha-enterprise", + "gapic-version": "1.28.2", + "id": "google-cloud-recaptcha-enterprise", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "recaptchaenterprise_grpc_service_config.json", + "service-yaml": "recaptchaenterprise_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-recaptcha-enterprise" + }, + { + "apiPath": "google/cloud/timeseriesinsights/v1", + "rest-numeric-enums": "True", + "retry-config": "timeseries_insights_grpc_service_config.json", + "service-yaml": "timeseriesinsights_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/workflows" + }, + { + "apiPath": "google/cloud/workflows/type" + }, + { + "apiPath": "google/cloud/workflows/v1", + "default-proto-package": "google.cloud.workflows.v1", + "documentation-name": "workflows", + "documentation-uri": "https://cloud.google.com/workflows/", + "gapic-version": "1.18.2", + "id": "google-cloud-workflows", + "reference-doc-includes": "workflows_v1beta+executions_v1+executions_v1beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "workflows_grpc_service_config.json", + "service-yaml": "workflows_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/workflows/executions" + }, + { + "apiPath": "google/cloud/workflows/executions/v1", + "default-proto-package": "google.cloud.workflows.executions.v1", + "documentation-name": "workflows", + "documentation-uri": "https://cloud.google.com/workflows/", + "gapic-version": "1.18.2", + "id": "google-cloud-workflows", + "reference-doc-includes": "workflows_v1beta+executions_v1+executions_v1beta", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "executions_grpc_service_config.json", + "service-yaml": "workflowexecutions_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/workflows/executions/v1beta", + "default-proto-package": "google.cloud.workflows.executions.v1", + "documentation-name": "workflows", + "documentation-uri": "https://cloud.google.com/workflows/", + "gapic-version": "1.18.2", + "id": "google-cloud-workflows", + "reference-doc-includes": "workflows_v1beta+executions_v1+executions_v1beta", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "executions_grpc_service_config.json", + "service-yaml": "workflowexecutions_v1beta.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/workflows/v1beta", + "default-proto-package": "google.cloud.workflows.v1", + "documentation-name": "workflows", + "documentation-uri": "https://cloud.google.com/workflows/", + "gapic-version": "1.18.2", + "id": "google-cloud-workflows", + "reference-doc-includes": "workflows_v1beta+executions_v1+executions_v1beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "workflows_grpc_service_config.json", + "service-yaml": "workflows_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/speech" + }, + { + "apiPath": "google/cloud/speech/v1p1beta1", + "default-proto-package": "google.cloud.speech.v1", + "documentation-name": "speech", + "documentation-uri": "https://cloud.google.com/speech-to-text/docs/", + "gapic-version": "2.33.0", + "id": "google-cloud-speech", + "reference-doc-includes": "speech_v1p1beta1+speech_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "speech_grpc_service_config.json", + "service-yaml": "speech_v1p1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/speech/v1", + "default-proto-package": "google.cloud.speech.v1", + "documentation-name": "speech", + "documentation-uri": "https://cloud.google.com/speech-to-text/docs/", + "gapic-version": "2.33.0", + "id": "google-cloud-speech", + "reference-doc-includes": "speech_v1p1beta1+speech_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "speech_grpc_service_config.json", + "service-yaml": "speech_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/speech/v2", + "default-proto-package": "google.cloud.speech.v1", + "documentation-name": "speech", + "documentation-uri": "https://cloud.google.com/speech-to-text/docs/", + "gapic-version": "2.33.0", + "id": "google-cloud-speech", + "reference-doc-includes": "speech_v1p1beta1+speech_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "speech_grpc_service_config.json", + "service-yaml": "speech_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/migrationcenter" + }, + { + "apiPath": "google/cloud/migrationcenter/v1", + "documentation-name": "migrationcenter", + "gapic-version": "0.1.15", + "id": "google-cloud-migrationcenter", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "migrationcenter_grpc_service_config.json", + "service-yaml": "migrationcenter_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/recommendationengine" + }, + { + "apiPath": "google/cloud/recommendationengine/v1beta1", + "documentation-name": "recommendationengine", + "documentation-uri": "https://cloud.google.com/recommendations-ai/", + "gapic-version": "0.10.18", + "id": "google-cloud-recommendations-ai", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "recommendationengine_grpc_service_config.json", + "service-yaml": "recommendationengine_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-recommendations-ai" + }, + { + "apiPath": "google/cloud/billing" + }, + { + "apiPath": "google/cloud/billing/v1", + "documentation-name": "cloudbilling", + "documentation-uri": "https://cloud.google.com/billing", + "gapic-version": "1.16.3", + "id": "google-cloud-billing", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloud_billing_grpc_service_config.json", + "service-yaml": "cloudbilling_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/billing/budgets" + }, + { + "apiPath": "google/cloud/billing/budgets/v1beta1", + "default-proto-package": "google.cloud.billing.budgets.v1", + "documentation-name": "billingbudgets", + "documentation-uri": "https://cloud.google.com/billing/docs/how-to/budget-api-overview", + "gapic-version": "1.17.2", + "id": "google-cloud-billing-budgets", + "reference-doc-includes": "budgets_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "billingbudgets_grpc_service_config.json", + "service-yaml": "billingbudgets.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/billing/budgets/v1", + "default-proto-package": "google.cloud.billing.budgets.v1", + "documentation-name": "billingbudgets", + "documentation-uri": "https://cloud.google.com/billing/docs/how-to/budget-api-overview", + "gapic-version": "1.17.2", + "id": "google-cloud-billing-budgets", + "reference-doc-includes": "budgets_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "billingbudgets_grpc_service_config.json", + "service-yaml": "billingbudgets.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/parallelstore" + }, + { + "api-description": "Parallelstore is based on Intel DAOS and delivers up to 6.3x greater read throughput performance compared to competitive Lustre scratch offerings.", + "apiPath": "google/cloud/parallelstore/v1", + "default-proto-package": "google.cloud.parallelstore.v1", + "documentation-name": "google-cloud-parallelstore", + "gapic-version": "0.2.15", + "id": "google-cloud-parallelstore", + "reference-doc-includes": "parallelstore_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "parallelstore_v1_grpc_service_config.json", + "service-yaml": "parallelstore_v1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "Parallelstore is based on Intel DAOS and delivers up to 6.3x greater read throughput performance compared to competitive Lustre scratch offerings.", + "apiPath": "google/cloud/parallelstore/v1beta", + "default-proto-package": "google.cloud.parallelstore.v1", + "documentation-name": "google-cloud-parallelstore", + "gapic-version": "0.2.15", + "id": "google-cloud-parallelstore", + "reference-doc-includes": "parallelstore_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "parallelstore_v1beta_grpc_service_config.json", + "service-yaml": "parallelstore_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/baremetalsolution" + }, + { + "apiPath": "google/cloud/baremetalsolution/v2", + "documentation-name": "baremetalsolution", + "documentation-uri": "https://cloud.google.com/bare-metal/docs", + "gapic-version": "1.10.3", + "id": "google-cloud-bare-metal-solution", + "python-gapic-name": "bare_metal_solution", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "baremetalsolution_grpc_service_config.json", + "service-yaml": "baremetalsolution_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-bare-metal-solution" + }, + { + "apiPath": "google/cloud/lustre" + }, + { + "api-description": "null ", + "apiPath": "google/cloud/lustre/v1", + "documentation-name": "google-cloud-lustre", + "gapic-version": "0.1.1", + "id": "google-cloud-lustre", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "lustre_v1_grpc_service_config.json", + "service-yaml": "lustre_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/developerconnect" + }, + { + "apiPath": "google/cloud/developerconnect/v1", + "documentation-name": "google-cloud-developerconnect", + "gapic-version": "0.1.9", + "id": "google-cloud-developerconnect", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "developerconnect_v1_grpc_service_config.json", + "service-yaml": "developerconnect_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vmwareengine" + }, + { + "apiPath": "google/cloud/vmwareengine/v1", + "documentation-name": "vmwareengine", + "documentation-uri": "https://cloud.google.com/vmware-engine/", + "gapic-version": "1.8.3", + "id": "google-cloud-vmwareengine", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "vmwareengine_grpc_service_config.json", + "service-yaml": "vmwareengine_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/apigeeregistry" + }, + { + "api-description": "allows teams to upload and share machine-readable descriptions of APIs that are in use and in development.", + "apiPath": "google/cloud/apigeeregistry/v1", + "documentation-name": "apigeeregistry", + "documentation-uri": "https://cloud.google.com/apigee/docs/api-hub/get-started-registry-api", + "gapic-version": "0.6.18", + "id": "google-cloud-apigee-registry", + "python-gapic-name": "apigee_registry", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "apigeeregistry_grpc_service_config.json", + "service-yaml": "apigeeregistry_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-apigee-registry" + }, + { + "apiPath": "google/cloud/scheduler" + }, + { + "apiPath": "google/cloud/scheduler/v1beta1", + "default-proto-package": "google.cloud.scheduler.v1", + "documentation-name": "cloudscheduler", + "documentation-uri": "https://cloud.google.com/scheduler/docs", + "gapic-version": "2.16.1", + "id": "google-cloud-scheduler", + "reference-doc-includes": "scheduler_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudscheduler_grpc_service_config.json", + "service-yaml": "cloudscheduler_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/scheduler/v1", + "default-proto-package": "google.cloud.scheduler.v1", + "documentation-name": "cloudscheduler", + "documentation-uri": "https://cloud.google.com/scheduler/docs", + "gapic-version": "2.16.1", + "id": "google-cloud-scheduler", + "reference-doc-includes": "scheduler_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudscheduler_grpc_service_config.json", + "service-yaml": "cloudscheduler_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/commerce/consumer/procurement" + }, + { + "apiPath": "google/cloud/commerce/consumer/procurement/v1alpha1", + "default-proto-package": "google.cloud.commerce.consumer.procurement.v1", + "documentation-name": "procurement", + "documentation-uri": "https://cloud.google.com/marketplace/docs/", + "gapic-version": "0.2.0", + "id": "google-cloud-commerce-consumer-procurement", + "python-gapic-name": "commerce_consumer_procurement", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "procurement_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "commerceconsumerprocurement_grpc_service_config.json", + "service-yaml": "cloudcommerceconsumerprocurement_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/commerce/consumer/procurement/v1", + "default-proto-package": "google.cloud.commerce.consumer.procurement.v1", + "documentation-name": "procurement", + "gapic-version": "0.2.0", + "id": "google-cloud-commerce-consumer-procurement", + "python-gapic-name": "commerce_consumer_procurement", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "procurement_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "commerceconsumerprocurement_v1_grpc_service_config.json", + "service-yaml": "cloudcommerceconsumerprocurement_v1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "This package contains generated Python types for google.cloud.common", + "apiPath": "google/cloud/common", + "documentation-name": "common", + "documentation-uri": "https://cloud.google.com", + "gapic-version": "1.5.2", + "id": "google-cloud-common", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "Google Cloud Common", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/ids" + }, + { + "apiPath": "google/cloud/ids/logging/v1" + }, + { + "apiPath": "google/cloud/ids/v1", + "documentation-name": "ids", + "documentation-uri": "https://cloud.google.com/intrusion-detection-system/", + "gapic-version": "1.10.2", + "id": "google-cloud-ids", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "ids_grpc_service_config.json", + "service-yaml": "ids_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/identitytoolkit/logging" + }, + { + "apiPath": "google/cloud/identitytoolkit/v2", + "python-gapic-name": "identity_toolkit", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "identitytoolkit_grpc_service_config.json", + "service-yaml": "identitytoolkit_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-identity-toolkit" + }, + { + "apiPath": "google/cloud/redis" + }, + { + "apiPath": "google/cloud/redis/v1beta1", + "default-proto-package": "google.cloud.redis.v1", + "documentation-name": "redis", + "documentation-uri": "https://cloud.google.com/memorystore/docs/redis/", + "gapic-version": "2.18.1", + "id": "google-cloud-redis", + "reference-doc-includes": "redis_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "redis_grpc_service_config.json", + "service-yaml": "redis_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/redis/v1", + "default-proto-package": "google.cloud.redis.v1", + "documentation-name": "redis", + "documentation-uri": "https://cloud.google.com/memorystore/docs/redis/", + "gapic-version": "2.18.1", + "id": "google-cloud-redis", + "reference-doc-includes": "redis_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "redis_grpc_service_config.json", + "service-yaml": "redis_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/redis/cluster" + }, + { + "apiPath": "google/cloud/redis/cluster/v1beta1", + "default-proto-package": "google.cloud.redis.cluster.v1", + "documentation-name": "google-cloud-redis-cluster", + "gapic-version": "0.1.15", + "id": "google-cloud-redis-cluster", + "python-gapic-name": "redis_cluster", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cluster_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "redis_cluster_v1beta1_grpc_service_config.json", + "service-yaml": "redis_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/redis/cluster/v1", + "default-proto-package": "google.cloud.redis.cluster.v1", + "documentation-name": "google-cloud-redis-cluster", + "gapic-version": "0.1.15", + "id": "google-cloud-redis-cluster", + "python-gapic-name": "redis_cluster", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cluster_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "redis_cluster_v1_grpc_service_config.json", + "service-yaml": "redis_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/maintenance/api/v1beta", + "python-gapic-name": "maintenance_api", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "maintenance_v1beta_grpc_service_config.json", + "service-yaml": "maintenance_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/binaryauthorization" + }, + { + "apiPath": "google/cloud/binaryauthorization/v1beta1", + "default-proto-package": "google.cloud.binaryauthorization.v1", + "documentation-name": "binaryauthorization", + "documentation-uri": "https://cloud.google.com/binary-authorization", + "gapic-version": "1.13.2", + "id": "google-cloud-binary-authorization", + "reference-doc-includes": "binaryauthorization_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "binaryauthorization_grpc_service_config.json", + "service-yaml": "binaryauthorization_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-binary-authorization" + }, + { + "apiPath": "google/cloud/binaryauthorization/v1", + "default-proto-package": "google.cloud.binaryauthorization.v1", + "documentation-name": "binaryauthorization", + "documentation-uri": "https://cloud.google.com/binary-authorization", + "gapic-version": "1.13.2", + "id": "google-cloud-binary-authorization", + "reference-doc-includes": "binaryauthorization_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "binaryauthorization_grpc_service_config.json", + "service-yaml": "binaryauthorization_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-binary-authorization" + }, + { + "api-description": "", + "apiPath": "google/cloud/contentwarehouse/v1", + "documentation-name": "contentwarehouse", + "documentation-uri": "https://cloud.google.com/document-warehouse/", + "gapic-version": "0.7.16", + "id": "google-cloud-contentwarehouse", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "contentwarehouse_grpc_service_config.json", + "service-yaml": "contentwarehouse_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/domains" + }, + { + "apiPath": "google/cloud/domains/v1beta1", + "default-proto-package": "google.cloud.domains.v1", + "documentation-name": "domains", + "documentation-uri": "https://cloud.google.com/domains", + "gapic-version": "1.10.2", + "id": "google-cloud-domains", + "reference-doc-includes": "domains_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "domains_grpc_service_config.json", + "service-yaml": "domains_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/domains/v1alpha2", + "rest-numeric-enums": "True", + "retry-config": "domains_grpc_service_config.json", + "service-yaml": "domains_v1alpha2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/domains/v1", + "default-proto-package": "google.cloud.domains.v1", + "documentation-name": "domains", + "documentation-uri": "https://cloud.google.com/domains", + "gapic-version": "1.10.2", + "id": "google-cloud-domains", + "reference-doc-includes": "domains_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "domains_grpc_service_config.json", + "service-yaml": "domains_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/orgpolicy" + }, + { + "apiPath": "google/cloud/orgpolicy/v1" + }, + { + "apiPath": "google/cloud/orgpolicy/v2", + "documentation-name": "orgpolicy", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/organization-policy/overview", + "gapic-version": "1.14.0", + "id": "google-cloud-org-policy", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "orgpolicy_grpc_service_config.json", + "service-yaml": "orgpolicy_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-org-policy" + }, + { + "apiPath": "google/cloud/automl" + }, + { + "apiPath": "google/cloud/automl/v1beta1", + "default-proto-package": "google.cloud.automl.v1", + "documentation-name": "automl", + "documentation-uri": "https://cloud.google.com/automl/docs/", + "gapic-version": "2.16.4", + "id": "google-cloud-automl", + "reference-doc-includes": "automl_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "automl_grpc_service_config.json", + "service-yaml": "automl_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/automl/v1", + "default-proto-package": "google.cloud.automl.v1", + "documentation-name": "automl", + "documentation-uri": "https://cloud.google.com/automl/docs/", + "gapic-version": "2.16.4", + "id": "google-cloud-automl", + "reference-doc-includes": "automl_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "automl_grpc_service_config.json", + "service-yaml": "automl_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/translate" + }, + { + "apiPath": "google/cloud/translate/v3", + "python-gapic-name": "translate", + "rest-numeric-enums": "True", + "retry-config": "translate_grpc_service_config.json", + "service-yaml": "translate_v3.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/translate/v3beta1", + "python-gapic-name": "translate", + "rest-numeric-enums": "True", + "retry-config": "translate_grpc_service_config.json", + "service-yaml": "translate_v3beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/datalabeling" + }, + { + "apiPath": "google/cloud/datalabeling/v1beta1", + "documentation-name": "datalabeling", + "documentation-uri": "https://cloud.google.com/data-labeling/docs/", + "gapic-version": "1.13.2", + "id": "google-cloud-datalabeling", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "datalabeling_grpc_service_config.json", + "service-yaml": "datalabeling_v1beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/clouddms" + }, + { + "apiPath": "google/cloud/clouddms/logging/v1" + }, + { + "apiPath": "google/cloud/clouddms/v1", + "documentation-name": "datamigration", + "documentation-uri": "https://cloud.google.com/database-migration/", + "gapic-version": "1.12.4", + "id": "google-cloud-dms", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "library_grpc_service_config.json", + "service-yaml": "datamigration_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-dms" + }, + { + "apiPath": "google/cloud/apphub" + }, + { + "api-description": "null ", + "apiPath": "google/cloud/apphub/v1", + "documentation-name": "google-cloud-apphub", + "gapic-version": "0.1.10", + "id": "google-cloud-apphub", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "apphub_v1_grpc_service_config.json", + "service-yaml": "apphub_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/oracledatabase" + }, + { + "apiPath": "google/cloud/oracledatabase/v1", + "documentation-name": "google-cloud-oracledatabase", + "gapic-version": "0.1.10", + "id": "google-cloud-oracledatabase", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "oracledatabase_v1_grpc_service_config.json", + "service-yaml": "oracledatabase_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/run" + }, + { + "apiPath": "google/cloud/run/v2", + "documentation-name": "run", + "documentation-uri": "https://cloud.google.com/run/docs", + "gapic-version": "0.10.18", + "id": "google-cloud-run", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "run_grpc_service_config.json", + "service-yaml": "run_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/managedidentities" + }, + { + "apiPath": "google/cloud/managedidentities/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "managedidentities_grpc_service_config.json", + "service-yaml": "managedidentities_v1beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/managedidentities/v1", + "documentation-name": "managedidentities", + "documentation-uri": "https://cloud.google.com/managed-microsoft-ad/", + "gapic-version": "1.12.2", + "id": "google-cloud-managed-identities", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "managedidentities_grpc_service_config.json", + "service-yaml": "managedidentities_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-managed-identities" + }, + { + "apiPath": "google/cloud/optimization" + }, + { + "apiPath": "google/cloud/optimization/v1", + "documentation-name": "optimization", + "documentation-uri": "https://cloud.google.com/optimization/docs", + "gapic-version": "1.11.2", + "id": "google-cloud-optimization", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudoptimization_grpc_service_config.json", + "service-yaml": "cloudoptimization_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/deploy" + }, + { + "api-description": "is a service that automates delivery of your applications to a series of target environments in a defined sequence", + "apiPath": "google/cloud/deploy/v1", + "documentation-name": "clouddeploy", + "documentation-uri": "https://cloud.google.com/deploy/", + "gapic-version": "2.7.1", + "id": "google-cloud-deploy", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "clouddeploy_grpc_service_config.json", + "service-yaml": "clouddeploy_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networkanalyzer/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/location" + }, + { + "apiPath": "google/cloud/workstations" + }, + { + "apiPath": "google/cloud/workstations/logging/v1" + }, + { + "apiPath": "google/cloud/workstations/v1", + "default-proto-package": "google.cloud.workstations.v1", + "documentation-name": "workstations", + "gapic-version": "0.5.15", + "id": "google-cloud-workstations", + "reference-doc-includes": "workstations_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "workstations_grpc_service_config.json", + "service-yaml": "workstations_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/workstations/v1beta", + "default-proto-package": "google.cloud.workstations.v1", + "documentation-name": "workstations", + "gapic-version": "0.5.15", + "id": "google-cloud-workstations", + "reference-doc-includes": "workstations_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "workstations_grpc_service_config.json", + "service-yaml": "workstations_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/discoveryengine" + }, + { + "apiPath": "google/cloud/discoveryengine/v1alpha", + "default-proto-package": "google.cloud.discoveryengine.v1", + "documentation-name": "discoveryengine", + "gapic-version": "0.13.9", + "id": "google-cloud-discoveryengine", + "reference-doc-includes": "discoveryengine_v1beta+discoveryengine_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "discoveryengine_grpc_service_config.json", + "service-yaml": "discoveryengine_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/discoveryengine/v1", + "default-proto-package": "google.cloud.discoveryengine.v1", + "documentation-name": "discoveryengine", + "gapic-version": "0.13.9", + "id": "google-cloud-discoveryengine", + "reference-doc-includes": "discoveryengine_v1beta+discoveryengine_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "discoveryengine_grpc_service_config.json", + "service-yaml": "discoveryengine_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/discoveryengine/v1beta", + "default-proto-package": "google.cloud.discoveryengine.v1", + "documentation-name": "discoveryengine", + "gapic-version": "0.13.9", + "id": "google-cloud-discoveryengine", + "reference-doc-includes": "discoveryengine_v1beta+discoveryengine_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "discoveryengine_grpc_service_config.json", + "service-yaml": "discoveryengine_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securityposture/v1", + "rest-numeric-enums": "True", + "retry-config": "securityposture_v1_grpc_service_config.json", + "service-yaml": "securityposture_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networkmanagement" + }, + { + "apiPath": "google/cloud/networkmanagement/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "networkmanagement_grpc_service_config.json", + "service-yaml": "networkmanagement_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networkmanagement/v1", + "documentation-name": "networkmanagement", + "documentation-uri": "https://cloud.google.com/network-management", + "gapic-version": "1.26.1", + "id": "google-cloud-network-management", + "python-gapic-name": "network_management", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "networkmanagement_grpc_service_config.json", + "service-yaml": "networkmanagement_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-network-management" + }, + { + "apiPath": "google/cloud/gkebackup" + }, + { + "apiPath": "google/cloud/gkebackup/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gkebackup/v1", + "documentation-name": "gkebackup", + "gapic-version": "0.5.19", + "id": "google-cloud-gke-backup", + "python-gapic-name": "gke_backup", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "gkebackup_grpc_service_config.json", + "service-yaml": "gkebackup_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-backup" + }, + { + "apiPath": "google/cloud/saasaccelerator/management/logs/v1" + }, + { + "apiPath": "google/cloud/gkemulticloud" + }, + { + "apiPath": "google/cloud/gkemulticloud/v1", + "documentation-name": "gkemulticloud", + "gapic-version": "0.6.21", + "id": "google-cloud-gke-multicloud", + "python-gapic-name": "gke_multicloud", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "gkemulticloud_grpc_service_config.json", + "service-yaml": "gkemulticloud_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-multicloud" + }, + { + "apiPath": "google/cloud/backupdr" + }, + { + "apiPath": "google/cloud/backupdr/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "api-description": "Backup and DR Service ensures that your data is managed, protected, and accessible using both hybrid and cloud-based backup/recovery appliances that are managed using the Backup and DR management console.", + "apiPath": "google/cloud/backupdr/v1", + "documentation-name": "backupdr", + "gapic-version": "0.2.4", + "id": "google-cloud-backupdr", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "backupdr_grpc_service_config.json", + "service-yaml": "backupdr_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/channel" + }, + { + "apiPath": "google/cloud/channel/v1", + "documentation-name": "cloudchannel", + "documentation-uri": "https://cloud.google.com/channel/", + "gapic-version": "1.23.0", + "id": "google-cloud-channel", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudchannel_grpc_service_config.json", + "service-yaml": "cloudchannel_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/sql" + }, + { + "apiPath": "google/cloud/sql/v1beta4", + "rest-numeric-enums": "True", + "retry-config": "sqladmin_grpc_service_config.json", + "service-yaml": "sqladmin_v1beta4.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/sql/v1", + "rest-numeric-enums": "True", + "retry-config": "sqladmin_grpc_service_config.json", + "service-yaml": "sqladmin_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/abuseevent/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/dialogflow" + }, + { + "apiPath": "google/cloud/dialogflow/cx" + }, + { + "apiPath": "google/cloud/dialogflow/cx/v3", + "default-proto-package": "google.cloud.dialogflow.cx.v3", + "documentation-name": "dialogflow-cx", + "documentation-uri": "https://cloud.google.com/dialogflow/cx/docs", + "gapic-version": "1.41.1", + "id": "google-cloud-dialogflow-cx", + "python-gapic-name": "dialogflowcx", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cx_v3beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dialogflow_grpc_service_config.json", + "service-yaml": "dialogflow_v3.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dialogflow-cx" + }, + { + "apiPath": "google/cloud/dialogflow/cx/v3beta1", + "default-proto-package": "google.cloud.dialogflow.cx.v3", + "documentation-name": "dialogflow-cx", + "documentation-uri": "https://cloud.google.com/dialogflow/cx/docs", + "gapic-version": "1.41.1", + "id": "google-cloud-dialogflow-cx", + "python-gapic-name": "dialogflowcx", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cx_v3beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dialogflow_grpc_service_config.json", + "service-yaml": "dialogflow_v3beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dialogflow-cx" + }, + { + "apiPath": "google/cloud/dialogflow/v2", + "default-proto-package": "google.cloud.dialogflow.v2", + "documentation-name": "dialogflow", + "documentation-uri": "https://www.dialogflow.com/", + "gapic-version": "2.41.2", + "id": "google-cloud-dialogflow", + "reference-doc-includes": "dialogflow_v2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dialogflow_grpc_service_config.json", + "service-yaml": "dialogflow_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/dialogflow/v2beta1", + "default-proto-package": "google.cloud.dialogflow.v2", + "documentation-name": "dialogflow", + "documentation-uri": "https://www.dialogflow.com/", + "gapic-version": "2.41.2", + "id": "google-cloud-dialogflow", + "reference-doc-includes": "dialogflow_v2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dialogflow_grpc_service_config.json", + "service-yaml": "dialogflow_v2beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/orchestration/airflow/service" + }, + { + "apiPath": "google/cloud/orchestration/airflow/service/v1beta1", + "default-proto-package": "google.cloud.orchestration.airflow.service.v1", + "documentation-name": "composer", + "documentation-uri": "https://cloud.google.com/composer/", + "gapic-version": "1.17.5", + "id": "google-cloud-orchestration-airflow", + "reference-doc-includes": "service_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "composer_grpc_service_config.json", + "service-yaml": "composer_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/orchestration/airflow/service/v1", + "default-proto-package": "google.cloud.orchestration.airflow.service.v1", + "documentation-name": "composer", + "documentation-uri": "https://cloud.google.com/composer/", + "gapic-version": "1.17.5", + "id": "google-cloud-orchestration-airflow", + "reference-doc-includes": "service_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "composer_grpc_service_config.json", + "service-yaml": "composer_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-orchestration-airflow" + }, + { + "apiPath": "google/cloud/alloydb" + }, + { + "apiPath": "google/cloud/alloydb/v1alpha", + "default-proto-package": "google.cloud.alloydb.v1", + "documentation-name": "alloydb", + "gapic-version": "0.4.8", + "id": "google-cloud-alloydb", + "reference-doc-includes": "alloydb_v1beta+alloydb_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "alloydb_v1alpha_grpc_service_config.json", + "service-yaml": "alloydb_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/alloydb/v1", + "default-proto-package": "google.cloud.alloydb.v1", + "documentation-name": "alloydb", + "gapic-version": "0.4.8", + "id": "google-cloud-alloydb", + "reference-doc-includes": "alloydb_v1beta+alloydb_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "alloydb_v1_grpc_service_config.json", + "service-yaml": "alloydb_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/alloydb/v1beta", + "default-proto-package": "google.cloud.alloydb.v1", + "documentation-name": "alloydb", + "gapic-version": "0.4.8", + "id": "google-cloud-alloydb", + "reference-doc-includes": "alloydb_v1beta+alloydb_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "alloydb_v1beta_grpc_service_config.json", + "service-yaml": "alloydb_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "provides enterprise-grade performance and availability while maintaining 100% compatibility with open-source PostgreSQL.", + "apiPath": "google/cloud/alloydb/connectors/v1alpha", + "default-proto-package": "google.cloud.alloydb.connectors.v1", + "documentation-name": "connectors", + "documentation-uri": "https://cloud.google.com/alloydb/docs", + "gapic-version": "0.1.10", + "id": "google-cloud-alloydb-connectors", + "reference-doc-includes": "connectors_v1alpha+connectors_v1beta", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "AlloyDB connectors", + "transport": "grpc+rest" + }, + { + "api-description": "provides enterprise-grade performance and availability while maintaining 100% compatibility with open-source PostgreSQL.", + "apiPath": "google/cloud/alloydb/connectors/v1", + "default-proto-package": "google.cloud.alloydb.connectors.v1", + "documentation-name": "connectors", + "documentation-uri": "https://cloud.google.com/alloydb/docs", + "gapic-version": "0.1.10", + "id": "google-cloud-alloydb-connectors", + "reference-doc-includes": "connectors_v1alpha+connectors_v1beta", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "AlloyDB connectors", + "transport": "grpc+rest" + }, + { + "api-description": "provides enterprise-grade performance and availability while maintaining 100% compatibility with open-source PostgreSQL.", + "apiPath": "google/cloud/alloydb/connectors/v1beta", + "default-proto-package": "google.cloud.alloydb.connectors.v1", + "documentation-name": "connectors", + "documentation-uri": "https://cloud.google.com/alloydb/docs", + "gapic-version": "0.1.10", + "id": "google-cloud-alloydb-connectors", + "reference-doc-includes": "connectors_v1alpha+connectors_v1beta", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "AlloyDB connectors", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/managedkafka" + }, + { + "apiPath": "google/cloud/managedkafka/v1", + "documentation-name": "google-cloud-managedkafka", + "gapic-version": "0.1.11", + "id": "google-cloud-managedkafka", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "managedkafka_v1_grpc_service_config.json", + "service-yaml": "managedkafka_v1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "Developers can use the Conversational Analytics API, accessed through geminidataanalytics.googleapis.com, to build an artificial intelligence (AI)-powered chat interface, or data agent, that answers questions about structured data in BigQuery, Looker, and Looker Studio using natural language.", + "apiPath": "google/cloud/geminidataanalytics/v1alpha", + "documentation-name": "google-cloud-geminidataanalytics", + "gapic-version": "0.1.0", + "id": "google-cloud-geminidataanalytics", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "geminidataanalytics_v1alpha_grpc_service_config.json", + "service-yaml": "geminidataanalytics_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/apigateway" + }, + { + "api-description": "enables you to provide secure access to your backend services through a well-defined REST API that is consistent across all of your services, regardless of the service implementation. Clients consume your REST APIS to implement standalone apps for a mobile device or tablet, through apps running in a browser, or through any other type of app that can make a request to an HTTP endpoint.", + "apiPath": "google/cloud/apigateway/v1", + "documentation-name": "apigateway", + "documentation-uri": "https://cloud.google.com/api-gateway", + "gapic-version": "1.12.2", + "id": "google-cloud-api-gateway", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "apigateway_grpc_service_config.json", + "service-yaml": "apigateway_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-api-gateway" + }, + { + "apiPath": "google/cloud/healthcare/logging" + }, + { + "apiPath": "google/cloud/filestore" + }, + { + "apiPath": "google/cloud/filestore/v1beta1", + "retry-config": "file_grpc_service_config.json" + }, + { + "apiPath": "google/cloud/filestore/v1", + "documentation-name": "file", + "documentation-uri": "https://cloud.google.com/filestore/", + "gapic-version": "1.13.2", + "id": "google-cloud-filestore", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "file_grpc_service_config.json", + "service-yaml": "file_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/contactcenterinsights" + }, + { + "api-description": " helps users detect and visualize patterns in their contact center data.", + "apiPath": "google/cloud/contactcenterinsights/v1", + "documentation-name": "contactcenterinsights", + "documentation-uri": "https://cloud.google.com/contact-center/insights/docs", + "gapic-version": "1.23.3", + "id": "google-cloud-contact-center-insights", + "python-gapic-name": "contact_center_insights", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "contactcenterinsights_grpc_service_config.json", + "service-yaml": "contactcenterinsights_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-contact-center-insights" + }, + { + "apiPath": "google/cloud/datastream" + }, + { + "api-description": "is a serverless and easy-to-use change data capture (CDC) and replication service. It allows you to synchronize data across heterogeneous databases and applications reliably, and with minimal latency and downtime.", + "apiPath": "google/cloud/datastream/v1alpha1", + "default-proto-package": "google.cloud.datastream.v1", + "documentation-name": "datastream", + "documentation-uri": "https://cloud.google.com/datastream/", + "gapic-version": "1.14.1", + "id": "google-cloud-datastream", + "reference-doc-includes": "datastream_v1alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "datastream_grpc_service_config.json", + "service-yaml": "datastream_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/datastream/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "api-description": "is a serverless and easy-to-use change data capture (CDC) and replication service. It allows you to synchronize data across heterogeneous databases and applications reliably, and with minimal latency and downtime.", + "apiPath": "google/cloud/datastream/v1", + "default-proto-package": "google.cloud.datastream.v1", + "documentation-name": "datastream", + "documentation-uri": "https://cloud.google.com/datastream/", + "gapic-version": "1.14.1", + "id": "google-cloud-datastream", + "reference-doc-includes": "datastream_v1alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "datastream_grpc_service_config.json", + "service-yaml": "datastream_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/datapipelines/logging/v1" + }, + { + "apiPath": "google/cloud/runtimeconfig" + }, + { + "apiPath": "google/cloud/lifesciences" + }, + { + "apiPath": "google/cloud/lifesciences/v2beta", + "documentation-name": "lifesciences", + "documentation-uri": "https://cloud.google.com/life-sciences/", + "gapic-version": "0.9.18", + "id": "google-cloud-life-sciences", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "lifesciences_grpc_service_config.json", + "service-yaml": "lifesciences_v2beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-life-sciences" + }, + { + "apiPath": "google/cloud/texttospeech" + }, + { + "apiPath": "google/cloud/texttospeech/v1beta1", + "default-proto-package": "google.cloud.texttospeech.v1", + "documentation-name": "texttospeech", + "documentation-uri": "https://cloud.google.com/text-to-speech", + "gapic-version": "2.27.0", + "id": "google-cloud-texttospeech", + "reference-doc-includes": "texttospeech_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "texttospeech_grpc_service_config.json", + "service-yaml": "texttospeech_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/texttospeech/v1", + "default-proto-package": "google.cloud.texttospeech.v1", + "documentation-name": "texttospeech", + "documentation-uri": "https://cloud.google.com/text-to-speech", + "gapic-version": "2.27.0", + "id": "google-cloud-texttospeech", + "reference-doc-includes": "texttospeech_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "texttospeech_grpc_service_config.json", + "service-yaml": "texttospeech_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/telcoautomation" + }, + { + "apiPath": "google/cloud/telcoautomation/v1alpha1", + "default-proto-package": "google.cloud.telcoautomation.v1", + "documentation-name": "google-cloud-telcoautomation", + "gapic-version": "0.2.11", + "id": "google-cloud-telcoautomation", + "reference-doc-includes": "telcoautomation_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "telcoautomation_v1alpha1_grpc_service_config.json", + "service-yaml": "telcoautomation_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/telcoautomation/v1", + "default-proto-package": "google.cloud.telcoautomation.v1", + "documentation-name": "google-cloud-telcoautomation", + "gapic-version": "0.2.11", + "id": "google-cloud-telcoautomation", + "reference-doc-includes": "telcoautomation_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "telcoautomation_v1_grpc_service_config.json", + "service-yaml": "telcoautomation_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/integrations/v1alpha", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/webrisk" + }, + { + "api-description": "is a Google Cloud service that lets client applications check URLs against Google's constantly updated lists of unsafe web resources. Unsafe web resources include social engineering sites\u2014such as phishing and deceptive sites\u2014and sites that host malware or unwanted software. With the Web Risk API, you can quickly identify known bad sites, warn users before they click infected links, and prevent users from posting links to known infected pages from your site. The Web Risk API includes data on more than a million unsafe URLs and stays up to date by examining billions of URLs each day.", + "apiPath": "google/cloud/webrisk/v1beta1", + "default-proto-package": "google.cloud.webrisk.v1", + "documentation-name": "webrisk", + "documentation-uri": "https://cloud.google.com/web-risk/docs/", + "gapic-version": "1.18.1", + "id": "google-cloud-webrisk", + "reference-doc-includes": "webrisk_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "webrisk_grpc_service_config.json", + "service-yaml": "webrisk_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "is a Google Cloud service that lets client applications check URLs against Google's constantly updated lists of unsafe web resources. Unsafe web resources include social engineering sites\u2014such as phishing and deceptive sites\u2014and sites that host malware or unwanted software. With the Web Risk API, you can quickly identify known bad sites, warn users before they click infected links, and prevent users from posting links to known infected pages from your site. The Web Risk API includes data on more than a million unsafe URLs and stays up to date by examining billions of URLs each day.", + "apiPath": "google/cloud/webrisk/v1", + "default-proto-package": "google.cloud.webrisk.v1", + "documentation-name": "webrisk", + "documentation-uri": "https://cloud.google.com/web-risk/docs/", + "gapic-version": "1.18.1", + "id": "google-cloud-webrisk", + "reference-doc-includes": "webrisk_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "webrisk_grpc_service_config.json", + "service-yaml": "webrisk_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/metastore" + }, + { + "apiPath": "google/cloud/metastore/v1alpha", + "default-proto-package": "google.cloud.metastore.v1", + "documentation-name": "metastore", + "documentation-uri": "https://cloud.google.com/dataproc-metastore/", + "gapic-version": "1.18.3", + "id": "google-cloud-dataproc-metastore", + "reference-doc-includes": "metastore_v1alpha+metastore_v1beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "metastore_grpc_service_config.json", + "service-yaml": "metastore_v1alpha.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dataproc-metastore" + }, + { + "apiPath": "google/cloud/metastore/logging/v1" + }, + { + "apiPath": "google/cloud/metastore/v1", + "default-proto-package": "google.cloud.metastore.v1", + "documentation-name": "metastore", + "documentation-uri": "https://cloud.google.com/dataproc-metastore/", + "gapic-version": "1.18.3", + "id": "google-cloud-dataproc-metastore", + "reference-doc-includes": "metastore_v1alpha+metastore_v1beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "metastore_grpc_service_config.json", + "service-yaml": "metastore_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dataproc-metastore" + }, + { + "apiPath": "google/cloud/metastore/v1beta", + "default-proto-package": "google.cloud.metastore.v1", + "documentation-name": "metastore", + "documentation-uri": "https://cloud.google.com/dataproc-metastore/", + "gapic-version": "1.18.3", + "id": "google-cloud-dataproc-metastore", + "reference-doc-includes": "metastore_v1alpha+metastore_v1beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "metastore_grpc_service_config.json", + "service-yaml": "metastore_v1beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-dataproc-metastore" + }, + { + "apiPath": "google/cloud/accessapproval" + }, + { + "apiPath": "google/cloud/accessapproval/v1", + "documentation-name": "accessapproval", + "gapic-version": "1.16.2", + "id": "google-cloud-access-approval", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "accessapproval_grpc_service_config.json", + "service-yaml": "accessapproval_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-access-approval" + }, + { + "apiPath": "google/cloud/datafusion" + }, + { + "apiPath": "google/cloud/datafusion/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "datafusion_grpc_service_config.json", + "service-yaml": "datafusion_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/datafusion/v1", + "documentation-name": "datafusion", + "documentation-uri": "https://cloud.google.com/data-fusion", + "gapic-version": "1.13.3", + "id": "google-cloud-data-fusion", + "python-gapic-name": "data_fusion", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "datafusion_grpc_service_config.json", + "service-yaml": "datafusion_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-data-fusion" + }, + { + "apiPath": "google/cloud/certificatemanager" + }, + { + "apiPath": "google/cloud/certificatemanager/logging/v1" + }, + { + "api-description": "lets you acquire and manage TLS (SSL) certificates for use with Cloud Load Balancing.", + "apiPath": "google/cloud/certificatemanager/v1", + "documentation-name": "certificatemanager", + "documentation-uri": "https://cloud.google.com/python/docs/reference/certificatemanager/latest", + "gapic-version": "1.10.2", + "id": "google-cloud-certificate-manager", + "python-gapic-name": "certificate_manager", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "certificatemanager_grpc_service_config.json", + "service-yaml": "certificatemanager_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-certificate-manager" + }, + { + "apiPath": "google/cloud/vmmigration" + }, + { + "apiPath": "google/cloud/vmmigration/v1", + "documentation-name": "vmmigration", + "documentation-uri": "https://cloud.google.com/migrate/compute-engine/docs", + "gapic-version": "1.11.3", + "id": "google-cloud-vm-migration", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vmmigration_v1_grpc_service_config.json", + "service-yaml": "vmmigration_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-vm-migration" + }, + { + "apiPath": "google/cloud/policytroubleshooter" + }, + { + "api-description": "makes it easier to understand why a user has access to a resource or doesn't have permission to call an API. Given an email, resource, and permission, Policy Troubleshooter examines all Identity and Access Management (IAM) policies that apply to the resource. It then reveals whether the member's roles include the permission on that resource and, if so, which policies bind the member to those roles.", + "apiPath": "google/cloud/policytroubleshooter/v1", + "documentation-name": "policytroubleshooter", + "gapic-version": "1.13.3", + "id": "google-cloud-policy-troubleshooter", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "checker_grpc_service_config.json", + "service-yaml": "policytroubleshooter_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-policy-troubleshooter" + }, + { + "apiPath": "google/cloud/policytroubleshooter/iam" + }, + { + "api-description": "", + "apiPath": "google/cloud/policytroubleshooter/iam/v3", + "documentation-name": "policytroubleshooter-iam", + "gapic-version": "0.1.13", + "id": "google-cloud-policytroubleshooter-iam", + "python-gapic-name": "policytroubleshooter_iam", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "policytroubleshooter_v3_grpc_service_config.json", + "service-yaml": "policytroubleshooter_v3.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/policytroubleshooter/iam/v3beta", + "rest-numeric-enums": "True", + "retry-config": "policytroubleshooter_v3beta_grpc_service_config.json", + "service-yaml": "policytroubleshooter_v3beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/video/transcoder" + }, + { + "apiPath": "google/cloud/video/transcoder/v1", + "documentation-name": "transcoder", + "documentation-uri": "https://cloud.google.com/transcoder", + "gapic-version": "1.15.2", + "id": "google-cloud-video-transcoder", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "transcoder_grpc_service_config.json", + "service-yaml": "transcoder_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/video/livestream" + }, + { + "apiPath": "google/cloud/video/livestream/logging/v1" + }, + { + "api-description": "transcodes mezzanine live signals into direct-to-consumer streaming formats, including Dynamic Adaptive Streaming over HTTP (DASH/MPEG-DASH), and HTTP Live Streaming (HLS), for multiple device platforms.", + "apiPath": "google/cloud/video/livestream/v1", + "documentation-name": "livestream", + "documentation-uri": "https://cloud.google.com/livestream/docs", + "gapic-version": "1.12.0", + "id": "google-cloud-video-live-stream", + "python-gapic-name": "live_stream", + "python-gapic-namespace": "google.cloud.video", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "livestream_grpc_service_config.json", + "service-yaml": "livestream_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-video-live-stream" + }, + { + "apiPath": "google/cloud/video/stitcher" + }, + { + "api-description": "The Video Stitcher API helps you generate dynamic content for delivery to client devices. You can call the Video Stitcher API from your servers to dynamically insert ads into video-on-demand and livestreams for your users.", + "apiPath": "google/cloud/video/stitcher/v1", + "documentation-name": "videostitcher", + "documentation-uri": "https://cloud.google.com/video-stitcher", + "gapic-version": "0.7.18", + "id": "google-cloud-video-stitcher", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "videostitcher_grpc_service_config.json", + "service-yaml": "videostitcher_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/websecurityscanner" + }, + { + "apiPath": "google/cloud/websecurityscanner/v1alpha", + "default-proto-package": "google.cloud.websecurityscanner.v1", + "documentation-name": "websecurityscanner", + "documentation-uri": "https://cloud.google.com/security-scanner/docs/", + "gapic-version": "1.17.3", + "id": "google-cloud-websecurityscanner", + "reference-doc-includes": "websecurityscanner_v1beta+websecurityscanner_v1alpha", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "websecurityscanner_grpc_service_config.json", + "service-yaml": "websecurityscanner_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/websecurityscanner/v1", + "default-proto-package": "google.cloud.websecurityscanner.v1", + "documentation-name": "websecurityscanner", + "documentation-uri": "https://cloud.google.com/security-scanner/docs/", + "gapic-version": "1.17.3", + "id": "google-cloud-websecurityscanner", + "reference-doc-includes": "websecurityscanner_v1beta+websecurityscanner_v1alpha", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "websecurityscanner_grpc_service_config.json", + "service-yaml": "websecurityscanner_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/websecurityscanner/v1beta", + "default-proto-package": "google.cloud.websecurityscanner.v1", + "documentation-name": "websecurityscanner", + "documentation-uri": "https://cloud.google.com/security-scanner/docs/", + "gapic-version": "1.17.3", + "id": "google-cloud-websecurityscanner", + "reference-doc-includes": "websecurityscanner_v1beta+websecurityscanner_v1alpha", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "websecurityscanner_grpc_service_config.json", + "service-yaml": "websecurityscanner_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/notebooks" + }, + { + "apiPath": "google/cloud/notebooks/v1beta1", + "default-proto-package": "google.cloud.notebooks.v1", + "documentation-name": "notebooks", + "documentation-uri": "https://cloud.google.com/ai-platform/notebooks/", + "gapic-version": "1.13.3", + "id": "google-cloud-notebooks", + "reference-doc-includes": "notebooks_v1beta1+notebooks_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "notebooks_grpc_service_config.json", + "service-yaml": "notebooks_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/notebooks/logging/v1" + }, + { + "apiPath": "google/cloud/notebooks/v1", + "default-proto-package": "google.cloud.notebooks.v1", + "documentation-name": "notebooks", + "documentation-uri": "https://cloud.google.com/ai-platform/notebooks/", + "gapic-version": "1.13.3", + "id": "google-cloud-notebooks", + "reference-doc-includes": "notebooks_v1beta1+notebooks_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "notebooks_grpc_service_config.json", + "service-yaml": "notebooks_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/notebooks/v2", + "default-proto-package": "google.cloud.notebooks.v1", + "documentation-name": "notebooks", + "gapic-version": "1.13.3", + "id": "google-cloud-notebooks", + "reference-doc-includes": "notebooks_v1beta1+notebooks_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "notebooks_grpc_service_config.json", + "service-yaml": "notebooks_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gkehub" + }, + { + "api-description": "provides a unified way to work with Kubernetes clusters as part of Anthos, extending GKE to work in multiple environments. You have consistent, unified, and secure infrastructure, cluster, and container management, whether you're using Anthos on Google Cloud (with traditional GKE), hybrid cloud, or multiple public clouds.", + "apiPath": "google/cloud/gkehub/v1beta1", + "default-proto-package": "google.cloud.gkehub.v1", + "documentation-name": "gkehub", + "documentation-uri": "https://cloud.google.com/anthos/gke/docs/", + "gapic-version": "1.17.3", + "id": "google-cloud-gke-hub", + "reference-doc-includes": "gkehub_configmanagement_v1+gkehub_multiclusteringress_v1+gkehub_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "membership_grpc_service_config.json", + "service-yaml": "gkehub_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-hub" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha", + "rest-numeric-enums": "True", + "retry-config": "v1alpha_grpc_service_config.json", + "service-yaml": "gkehub_v1alpha.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-hub" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha/configmanagement", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha/servicemesh", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha/cloudauditlogging", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha/multiclusteringress", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1alpha/metering", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/servicemesh/v1beta", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "api-description": "provides a unified way to work with Kubernetes clusters as part of Anthos, extending GKE to work in multiple environments. You have consistent, unified, and secure infrastructure, cluster, and container management, whether you're using Anthos on Google Cloud (with traditional GKE), hybrid cloud, or multiple public clouds.", + "apiPath": "google/cloud/gkehub/v1", + "default-proto-package": "google.cloud.gkehub.v1", + "documentation-name": "gkehub", + "documentation-uri": "https://cloud.google.com/anthos/gke/docs/", + "gapic-version": "1.17.3", + "id": "google-cloud-gke-hub", + "reference-doc-includes": "gkehub_configmanagement_v1+gkehub_multiclusteringress_v1+gkehub_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "v1_grpc_service_config.json", + "service-yaml": "gkehub_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-hub" + }, + { + "apiPath": "google/cloud/gkehub/v1/configmanagement", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1/multiclusteringress", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/policycontroller/v1beta", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gkehub/v1beta", + "rest-numeric-enums": "True", + "retry-config": "v1beta_grpc_service_config.json", + "service-yaml": "gkehub_v1beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-gke-hub" + }, + { + "apiPath": "google/cloud/gkehub/v1beta/configmanagement", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/gkehub/v1beta/multiclusteringress", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/gkehub/v1beta/metering", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/iap" + }, + { + "apiPath": "google/cloud/iap/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "iap_grpc_service_config.json", + "service-yaml": "iap_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/iap/v1", + "documentation-name": "iap", + "documentation-uri": "https://cloud.google.com/iap", + "gapic-version": "1.17.1", + "id": "google-cloud-iap", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iap_grpc_service_config.json", + "service-yaml": "iap_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/talent" + }, + { + "apiPath": "google/cloud/talent/v4beta1", + "default-proto-package": "google.cloud.talent.v4", + "documentation-name": "talent", + "documentation-uri": "https://cloud.google.com/solutions/talent-solution/", + "gapic-version": "2.17.2", + "id": "google-cloud-talent", + "reference-doc-includes": "talent_v4beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "talent_grpc_service_config.json", + "service-yaml": "jobs_v4beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/talent/v4", + "default-proto-package": "google.cloud.talent.v4", + "documentation-name": "talent", + "documentation-uri": "https://cloud.google.com/solutions/talent-solution/", + "gapic-version": "2.17.2", + "id": "google-cloud-talent", + "reference-doc-includes": "talent_v4beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "talent_grpc_service_config.json", + "service-yaml": "jobs_v4.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vpcaccess" + }, + { + "apiPath": "google/cloud/vpcaccess/v1", + "documentation-name": "vpcaccess", + "documentation-uri": "https://cloud.google.com/vpc/", + "gapic-version": "1.13.2", + "id": "google-cloud-vpc-access", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vpcaccess_grpc_service_config.json", + "service-yaml": "vpcaccess_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-vpc-access" + }, + { + "apiPath": "google/cloud/edgenetwork" + }, + { + "apiPath": "google/cloud/edgenetwork/v1", + "documentation-name": "google-cloud-edgenetwork", + "gapic-version": "0.1.18", + "id": "google-cloud-edgenetwork", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "edgenetwork_grpc_service_config.json", + "service-yaml": "edgenetwork_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/osconfig" + }, + { + "apiPath": "google/cloud/osconfig/agentendpoint/v1", + "rest-numeric-enums": "True", + "retry-config": "agentendpoint_grpc_service_config.json", + "service-yaml": "osconfig_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/osconfig/agentendpoint/v1beta", + "rest-numeric-enums": "True", + "retry-config": "agentendpoint_grpc_service_config.json", + "service-yaml": "osconfig_v1beta.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/osconfig/v1alpha", + "default-proto-package": "google.cloud.osconfig.v1", + "documentation-name": "osconfig", + "documentation-uri": "https://cloud.google.com/compute/docs/manage-os", + "gapic-version": "1.20.2", + "id": "google-cloud-os-config", + "reference-doc-includes": "osconfig_v1alpha", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "osconfig_grpc_service_config.json", + "service-yaml": "osconfig_v1alpha.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-os-config" + }, + { + "apiPath": "google/cloud/osconfig/logging" + }, + { + "apiPath": "google/cloud/osconfig/v1", + "default-proto-package": "google.cloud.osconfig.v1", + "documentation-name": "osconfig", + "documentation-uri": "https://cloud.google.com/compute/docs/manage-os", + "gapic-version": "1.20.2", + "id": "google-cloud-os-config", + "reference-doc-includes": "osconfig_v1alpha", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "osconfig_grpc_service_config.json", + "service-yaml": "osconfig_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-os-config" + }, + { + "apiPath": "google/cloud/osconfig/v1beta", + "rest-numeric-enums": "True", + "retry-config": "osconfig_grpc_service_config.json", + "service-yaml": "osconfig_v1beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-os-config" + }, + { + "apiPath": "google/cloud/aiplatform" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "aiplatform_grpc_service_config.json", + "service-yaml": "aiplatform_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1/schema" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1/schema/trainingjob/definition", + "python-gapic-name": "definition", + "python-gapic-namespace": "google.cloud.aiplatform.v1beta1.schema.trainingjob", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1/schema/predict/instance", + "python-gapic-name": "instance", + "python-gapic-namespace": "google.cloud.aiplatform.v1beta1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1/schema/predict/params", + "python-gapic-name": "params", + "python-gapic-namespace": "google.cloud.aiplatform.v1beta1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1beta1/schema/predict/prediction", + "python-gapic-name": "prediction", + "python-gapic-namespace": "google.cloud.aiplatform.v1beta1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/logging" + }, + { + "apiPath": "google/cloud/aiplatform/v1", + "rest-numeric-enums": "True", + "retry-config": "aiplatform_grpc_service_config.json", + "service-yaml": "aiplatform_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/aiplatform/v1/schema/trainingjob/definition", + "python-gapic-name": "definition", + "python-gapic-namespace": "google.cloud.aiplatform.v1.schema.trainingjob", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1/schema/predict/instance", + "python-gapic-name": "instance", + "python-gapic-namespace": "google.cloud.aiplatform.v1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1/schema/predict/params", + "python-gapic-name": "params", + "python-gapic-namespace": "google.cloud.aiplatform.v1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/aiplatform/v1/schema/predict/prediction", + "python-gapic-name": "prediction", + "python-gapic-namespace": "google.cloud.aiplatform.v1.schema.predict", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/rapidmigrationassessment" + }, + { + "apiPath": "google/cloud/rapidmigrationassessment/v1", + "documentation-name": "rapidmigrationassessment", + "gapic-version": "0.1.16", + "id": "google-cloud-rapidmigrationassessment", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "rapidmigrationassessment_v1_grpc_service_config.json", + "service-yaml": "rapidmigrationassessment_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/advisorynotifications" + }, + { + "apiPath": "google/cloud/advisorynotifications/v1", + "documentation-name": "advisorynotifications", + "gapic-version": "0.3.16", + "id": "google-cloud-advisorynotifications", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "advisorynotifications_v1_grpc_service_config.json", + "service-yaml": "advisorynotifications_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/memcache" + }, + { + "apiPath": "google/cloud/memcache/v1beta2", + "default-proto-package": "google.cloud.memcache.v1", + "documentation-name": "memcache", + "documentation-uri": "cloud.google.com/memorystore/docs/memcached/", + "gapic-version": "1.12.2", + "id": "google-cloud-memcache", + "reference-doc-includes": "memcache_v1beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "memcache_grpc_service_config.json", + "service-yaml": "memcache_v1beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/memcache/v1", + "default-proto-package": "google.cloud.memcache.v1", + "documentation-name": "memcache", + "documentation-uri": "cloud.google.com/memorystore/docs/memcached/", + "gapic-version": "1.12.2", + "id": "google-cloud-memcache", + "reference-doc-includes": "memcache_v1beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "memcache_grpc_service_config.json", + "service-yaml": "memcache_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/memorystore" + }, + { + "api-description": "Memorystore for Valkey is a fully managed Valkey Cluster service for Google Cloud. Applications running on Google Cloud can achieve extreme performance by leveraging the highly scalable, available, secure Valkey service without the burden of managing complex Valkey deployments.", + "apiPath": "google/cloud/memorystore/v1", + "default-proto-package": "google.cloud.memorystore.v1", + "documentation-name": "google-cloud-memorystore", + "gapic-version": "0.1.3", + "id": "google-cloud-memorystore", + "reference-doc-includes": "memorystore_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "memorystore_v1_grpc_service_config.json", + "service-yaml": "memorystore_v1.yaml", + "transport": "rest" + }, + { + "api-description": "Memorystore for Valkey is a fully managed Valkey Cluster service for Google Cloud. Applications running on Google Cloud can achieve extreme performance by leveraging the highly scalable, available, secure Valkey service without the burden of managing complex Valkey deployments.", + "apiPath": "google/cloud/memorystore/v1beta", + "default-proto-package": "google.cloud.memorystore.v1", + "documentation-name": "google-cloud-memorystore", + "gapic-version": "0.1.3", + "id": "google-cloud-memorystore", + "reference-doc-includes": "memorystore_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "memorystore_v1beta_grpc_service_config.json", + "service-yaml": "memorystore_v1beta.yaml", + "transport": "rest" + }, + { + "apiPath": "google/cloud/functions" + }, + { + "apiPath": "google/cloud/functions/v1", + "default-proto-package": "google.cloud.functions.v1", + "documentation-name": "cloudfunctions", + "documentation-uri": "https://cloud.google.com/functions/", + "gapic-version": "1.20.4", + "id": "google-cloud-functions", + "reference-doc-includes": "functions_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "functions_grpc_service_config.json", + "service-yaml": "cloudfunctions_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/functions/v2beta", + "rest-numeric-enums": "True", + "retry-config": "functions_grpc_service_config.json", + "service-yaml": "cloudfunctions_v2beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/functions/v2alpha", + "rest-numeric-enums": "True", + "retry-config": "functions_grpc_service_config.json", + "service-yaml": "cloudfunctions_v2alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/functions/v2", + "default-proto-package": "google.cloud.functions.v1", + "documentation-name": "cloudfunctions", + "documentation-uri": "https://cloud.google.com/functions/", + "gapic-version": "1.20.4", + "id": "google-cloud-functions", + "reference-doc-includes": "functions_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "functions_grpc_service_config.json", + "service-yaml": "cloudfunctions_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securesourcemanager" + }, + { + "apiPath": "google/cloud/securesourcemanager/v1", + "documentation-name": "securesourcemanager", + "gapic-version": "0.1.15", + "id": "google-cloud-securesourcemanager", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "securesourcemanager_grpc_service_config.json", + "service-yaml": "securesourcemanager_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/compute" + }, + { + "apiPath": "google/cloud/compute/v1small", + "transport": "rest" + }, + { + "api-description": "delivers virtual machines running in Google's innovative data centers and worldwide fiber network. Compute Engine's tooling and workflow support enable scaling from single instances to global, load-balanced cloud computing. Compute Engine's VMs boot quickly, come with persistent disk storage, deliver consistent performance and are available in many configurations.", + "apiPath": "google/cloud/compute/v1", + "documentation-name": "compute", + "documentation-uri": "https://cloud.google.com/compute/", + "gapic-version": "1.31.0", + "id": "google-cloud-compute", + "release-level": "stable", + "rest-numeric-enums": "False", + "service-yaml": "compute_v1.yaml", + "transport": "rest" + }, + { + "api-description": "delivers virtual machines running in Google's innovative data centers and worldwide fiber network. Compute Engine's tooling and workflow support enable scaling from single instances to global, load-balanced cloud computing. Compute Engine's VMs boot quickly, come with persistent disk storage, deliver consistent performance and are available in many configurations.", + "apiPath": "google/cloud/compute/v1beta", + "documentation-name": "google-cloud-compute-v1beta", + "documentation-uri": "https://cloud.google.com/compute/", + "gapic-version": "0.1.2", + "id": "google-cloud-compute-v1beta", + "release-level": "stable", + "rest-numeric-enums": "False", + "service-yaml": "compute_v1beta.yaml", + "transport": "rest", + "warehouse-package-name": "google-cloud-compute-v1beta" + }, + { + "api-description": "", + "apiPath": "google/cloud/enterpriseknowledgegraph/v1", + "documentation-name": "enterpriseknowledgegraph", + "documentation-uri": "https://cloud.google.com/enterprise-knowledge-graph/", + "gapic-version": "0.3.17", + "id": "google-cloud-enterpriseknowledgegraph", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "enterpriseknowledgegraph_grpc_service_config.json", + "service-yaml": "enterpriseknowledgegraph_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/parametermanager" + }, + { + "apiPath": "google/cloud/parametermanager/v1", + "documentation-name": "google-cloud-parametermanager", + "gapic-version": "0.1.4", + "id": "google-cloud-parametermanager", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "parametermanager_v1_grpc_service_config.json", + "service-yaml": "parametermanager_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/sensitiveaction/logging/v1" + }, + { + "apiPath": "google/cloud/resourcemanager" + }, + { + "apiPath": "google/cloud/resourcemanager/v3", + "documentation-name": "cloudresourcemanager", + "documentation-uri": "https://cloud.google.com/resource-manager", + "gapic-version": "1.14.2", + "id": "google-cloud-resource-manager", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudresourcemanager_v3_grpc_service_config.json", + "service-yaml": "cloudresourcemanager_v3.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-resource-manager" + }, + { + "apiPath": "google/cloud/resourcemanager/v2" + }, + { + "apiPath": "google/cloud/paymentgateway/issuerswitch/v1", + "python-gapic-name": "payment_gateway_issuer_switch", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "False", + "retry-config": "issuerswitch_grpc_service_config.json", + "service-yaml": "issuerswitch_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-payment-gateway-issuer-switch" + }, + { + "apiPath": "google/cloud/support" + }, + { + "apiPath": "google/cloud/support/v2beta", + "default-proto-package": "google.cloud.support.v2", + "documentation-name": "support", + "gapic-version": "0.1.17", + "id": "google-cloud-support", + "reference-doc-includes": "support_v2beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "support_v2beta_grpc_service_config.json", + "service-yaml": "cloudsupport_v2beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/support/v2", + "default-proto-package": "google.cloud.support.v2", + "documentation-name": "support", + "gapic-version": "0.1.17", + "id": "google-cloud-support", + "reference-doc-includes": "support_v2beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "support_v2_grpc_service_config.json", + "service-yaml": "cloudsupport_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/edgecontainer" + }, + { + "api-description": "Google Distributed Cloud Edge allows you to run Kubernetes clusters on dedicated hardware provided and maintained by Google that is separate from the Google Cloud data center.", + "apiPath": "google/cloud/edgecontainer/v1", + "documentation-name": "edgecontainer", + "documentation-uri": "https://cloud.google.com/distributed-cloud/edge", + "gapic-version": "0.5.18", + "id": "google-cloud-edgecontainer", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "edgecontainer_grpc_service_config.json", + "service-yaml": "edgecontainer_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/chronicle" + }, + { + "apiPath": "google/cloud/chronicle/v1", + "documentation-name": "google-cloud-chronicle", + "gapic-version": "0.1.0", + "id": "google-cloud-chronicle", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "chronicle_v1_grpc_service_config.json", + "service-yaml": "chronicle_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/datacatalog" + }, + { + "apiPath": "google/cloud/datacatalog/v1beta1", + "default-proto-package": "google.cloud.datacatalog.v1", + "documentation-name": "datacatalog", + "gapic-version": "3.27.1", + "id": "google-cloud-datacatalog", + "reference-doc-includes": "datacatalog_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "datacatalog_grpc_service_config.json", + "service-yaml": "datacatalog_v1beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/datacatalog/v1", + "default-proto-package": "google.cloud.datacatalog.v1", + "documentation-name": "datacatalog", + "gapic-version": "3.27.1", + "id": "google-cloud-datacatalog", + "reference-doc-includes": "datacatalog_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "datacatalog_grpc_service_config.json", + "service-yaml": "datacatalog_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/datacatalog/lineage" + }, + { + "api-description": "Data lineage is a Dataplex feature that lets you track how data moves through your systems: where it comes from, where it is passed to, and what transformations are applied to it.", + "apiPath": "google/cloud/datacatalog/lineage/v1", + "documentation-name": "lineage", + "documentation-uri": "https://cloud.google.com/data-catalog/docs/concepts/about-data-lineage", + "gapic-version": "0.3.14", + "id": "google-cloud-datacatalog-lineage", + "python-gapic-name": "datacatalog_lineage", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "lineage_grpc_service_config.json", + "service-yaml": "datalineage_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/migration" + }, + { + "apiPath": "google/cloud/bigquery/migration/v2alpha", + "default-proto-package": "google.cloud.bigquery.migration.v2", + "documentation-name": "bigquerymigration", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/migration/", + "gapic-version": "0.11.15", + "id": "google-cloud-bigquery-migration", + "python-gapic-name": "bigquery_migration", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "migration_v2alpha", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "bigquerymigration_grpc_service_config.json", + "service-yaml": "bigquerymigration_v2alpha.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/migration/v2", + "default-proto-package": "google.cloud.bigquery.migration.v2", + "documentation-name": "bigquerymigration", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/migration/", + "gapic-version": "0.11.15", + "id": "google-cloud-bigquery-migration", + "python-gapic-name": "bigquery_migration", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "migration_v2alpha", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "bigquerymigration_grpc_service_config.json", + "service-yaml": "bigquerymigration_v2.yaml", + "transport": "grpc" + }, + { + "api-description": "BigQuery Logging Protos", + "apiPath": "google/cloud/bigquery/logging/v1", + "documentation-name": "bigquerylogging", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/auditlogs", + "gapic-version": "1.6.3", + "id": "google-cloud-bigquery-logging", + "python-gapic-name": "bigquery_logging", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "BigQuery Logging Protos", + "transport": "grpc", + "warehouse-package-name": "google-cloud-bigquery-logging" + }, + { + "apiPath": "google/cloud/bigquery/reservation" + }, + { + "apiPath": "google/cloud/bigquery/reservation/v1", + "documentation-name": "bigqueryreservation", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/reservations", + "gapic-version": "1.17.2", + "id": "google-cloud-bigquery-reservation", + "python-gapic-name": "bigquery_reservation", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "bigqueryreservation_grpc_service_config.json", + "service-yaml": "bigqueryreservation_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/dataexchange" + }, + { + "apiPath": "google/cloud/bigquery/dataexchange/v1beta1", + "documentation-name": "analyticshub", + "documentation-uri": "https://cloud.google.com/bigquery/docs/analytics-hub-introduction", + "gapic-version": "0.5.20", + "id": "google-cloud-bigquery-data-exchange", + "python-gapic-name": "bigquery_data_exchange", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "analyticshub_v1beta1_grpc_service_config.json", + "service-yaml": "analyticshub_v1beta1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-bigquery-data-exchange" + }, + { + "apiPath": "google/cloud/bigquery/storage" + }, + { + "apiPath": "google/cloud/bigquery/storage/v1beta1", + "rest-numeric-enums": "False", + "retry-config": "bigquerystorage_grpc_service_config.json", + "service-yaml": "bigquerystorage_v1beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/storage/v1beta2", + "python-gapic-name": "bigquery_storage", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "False", + "retry-config": "bigquerystorage_grpc_service_config.json", + "service-yaml": "bigquerystorage_v1beta2.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/storage/v1alpha", + "python-gapic-name": "bigquery_storage", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "bigquerystorage_v1alpha_grpc_service_config.json", + "service-yaml": "bigquerystorage_v1alpha.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/storage/v1", + "python-gapic-name": "bigquery_storage", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "False", + "retry-config": "bigquerystorage_grpc_service_config.json", + "service-yaml": "bigquerystorage_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/storage/v1beta", + "python-gapic-name": "bigquery_storage", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "bigquerystorage_v1beta_grpc_service_config.json", + "service-yaml": "bigquerystorage_v1beta.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/analyticshub" + }, + { + "apiPath": "google/cloud/bigquery/analyticshub/v1", + "documentation-name": "analyticshub", + "documentation-uri": "https://cloud.google.com/analytics-hub", + "gapic-version": "0.4.19", + "id": "google-cloud-bigquery-analyticshub", + "python-gapic-name": "bigquery_analyticshub", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "analyticshub_v1_grpc_service_config.json", + "service-yaml": "analyticshub_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/biglake/v1alpha1", + "default-proto-package": "google.cloud.bigquery.biglake.v1", + "documentation-name": "biglake", + "gapic-version": "0.4.15", + "id": "google-cloud-bigquery-biglake", + "python-gapic-name": "bigquery_biglake", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "biglake_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "biglake_v1alpha1_grpc_service_config.json", + "service-yaml": "biglake_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/biglake/v1", + "default-proto-package": "google.cloud.bigquery.biglake.v1", + "documentation-name": "biglake", + "gapic-version": "0.4.15", + "id": "google-cloud-bigquery-biglake", + "python-gapic-name": "bigquery_biglake", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "biglake_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "biglake_v1_grpc_service_config.json", + "service-yaml": "biglake_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/datatransfer" + }, + { + "apiPath": "google/cloud/bigquery/datatransfer/v1", + "documentation-name": "bigquerydatatransfer", + "documentation-uri": "https://cloud.google.com/bigquery/transfer/", + "gapic-version": "3.19.2", + "id": "google-cloud-bigquery-datatransfer", + "python-gapic-name": "bigquery_datatransfer", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "bigquerydatatransfer_grpc_service_config.json", + "service-yaml": "bigquerydatatransfer_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/v2", + "rest-numeric-enums": "True", + "retry-config": "bigquery_grpc_service_config.json", + "service-yaml": "bigquery_v2.yaml", + "transport": "rest" + }, + { + "apiPath": "google/cloud/bigquery/connection" + }, + { + "apiPath": "google/cloud/bigquery/connection/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "bigqueryconnection_grpc_service_config.json", + "service-yaml": "bigqueryconnection_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/connection/v1", + "documentation-name": "bigqueryconnection", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/bigqueryconnection", + "gapic-version": "1.18.3", + "id": "google-cloud-bigquery-connection", + "python-gapic-name": "bigquery_connection", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "bigqueryconnection_grpc_service_config.json", + "service-yaml": "bigqueryconnection_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/bigquery/datapolicies" + }, + { + "apiPath": "google/cloud/bigquery/datapolicies/v1beta1", + "default-proto-package": "google.cloud.bigquery.datapolicies.v1", + "documentation-name": "bigquerydatapolicy", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/bigquerydatapolicy/rest", + "gapic-version": "0.6.15", + "id": "google-cloud-bigquery-datapolicies", + "python-gapic-name": "bigquery_datapolicies", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "datapolicies_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "datapolicies_v1beta1_grpc_service_config.json", + "service-yaml": "bigquerydatapolicy_v1beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/bigquery/datapolicies/v1", + "default-proto-package": "google.cloud.bigquery.datapolicies.v1", + "documentation-name": "bigquerydatapolicy", + "documentation-uri": "https://cloud.google.com/bigquery/docs/reference/bigquerydatapolicy/rest", + "gapic-version": "0.6.15", + "id": "google-cloud-bigquery-datapolicies", + "python-gapic-name": "bigquery_datapolicies", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "datapolicies_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "datapolicies_v1_grpc_service_config.json", + "service-yaml": "bigquerydatapolicy_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/shell" + }, + { + "apiPath": "google/cloud/shell/v1", + "documentation-name": "cloudshell", + "documentation-uri": "https://cloud.google.com/shell/", + "gapic-version": "1.12.1", + "id": "google-cloud-shell", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudshell_grpc_service_config.json", + "service-yaml": "cloudshell_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/essentialcontacts" + }, + { + "api-description": "helps you customize who receives notifications by providing your own list of contacts in many Google Cloud services.", + "apiPath": "google/cloud/essentialcontacts/v1", + "documentation-name": "essentialcontacts", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/managing-notification-contacts/", + "gapic-version": "1.10.2", + "id": "google-cloud-essential-contacts", + "python-gapic-name": "essential_contacts", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "essentialcontacts_v1_grpc_service_config.json", + "service-yaml": "essentialcontacts_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-essential-contacts" + }, + { + "apiPath": "google/cloud/configdelivery/v1alpha", + "documentation-name": "google-cloud-configdelivery", + "gapic-version": "0.1.0", + "id": "google-cloud-configdelivery", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "configdelivery_v1alpha_grpc_service_config.json", + "service-yaml": "configdelivery_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/stream/logging/v1" + }, + { + "apiPath": "google/cloud/kubernetes/security/containersecurity_logging" + }, + { + "apiPath": "google/cloud/dataform" + }, + { + "apiPath": "google/cloud/dataform/v1beta1", + "default-proto-package": "google.cloud.dataform.v1", + "documentation-name": "dataform", + "gapic-version": "0.6.2", + "id": "google-cloud-dataform", + "reference-doc-includes": "dataform_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "dataform_grpc_service_config.json", + "service-yaml": "dataform_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/dataform/logging/v1" + }, + { + "apiPath": "google/cloud/dataform/v1", + "default-proto-package": "google.cloud.dataform.v1", + "documentation-name": "dataform", + "gapic-version": "0.6.2", + "id": "google-cloud-dataform", + "reference-doc-includes": "dataform_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "dataform_grpc_service_config.json", + "service-yaml": "dataform_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/privatecatalog" + }, + { + "apiPath": "google/cloud/privatecatalog/v1beta1", + "documentation-name": "cloudprivatecatalog", + "documentation-uri": "https://cloud.google.com/private-catalog/", + "gapic-version": "0.9.18", + "id": "google-cloud-private-catalog", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "cloudprivatecatalog_grpc_service_config.json", + "service-yaml": "cloudprivatecatalog_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-private-catalog" + }, + { + "apiPath": "google/cloud/assuredworkloads" + }, + { + "api-description": "allows you to secure your government workloads and accelerate your path to running compliant workloads on Google Cloud with Assured Workloads for Government.", + "apiPath": "google/cloud/assuredworkloads/v1beta1", + "default-proto-package": "google.cloud.assuredworkloads.v1", + "documentation-name": "assuredworkloads", + "documentation-uri": "https://cloud.google.com/assured-workloads/", + "gapic-version": "1.15.2", + "id": "google-cloud-assured-workloads", + "reference-doc-includes": "assuredworkloads_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "assuredworkloads_grpc_service_config.json", + "service-yaml": "assuredworkloads_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-assured-workloads" + }, + { + "apiPath": "google/cloud/assuredworkloads/regulatoryintercept/logging/v1" + }, + { + "api-description": "allows you to secure your government workloads and accelerate your path to running compliant workloads on Google Cloud with Assured Workloads for Government.", + "apiPath": "google/cloud/assuredworkloads/v1", + "default-proto-package": "google.cloud.assuredworkloads.v1", + "documentation-name": "assuredworkloads", + "documentation-uri": "https://cloud.google.com/assured-workloads/", + "gapic-version": "1.15.2", + "id": "google-cloud-assured-workloads", + "reference-doc-includes": "assuredworkloads_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "assuredworkloads_grpc_service_config.json", + "service-yaml": "assuredworkloads_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-assured-workloads" + }, + { + "apiPath": "google/cloud/apihub" + }, + { + "api-description": "API hub lets you consolidate and organize information about all of the APIs of interest to your organization. API hub lets you capture critical information about APIs that allows developers to discover and evaluate them easily and leverage the work of other teams wherever possible. API platform teams can use API hub to have visibility into and manage their portfolio of APIs.", + "apiPath": "google/cloud/apihub/v1", + "documentation-name": "google-cloud-apihub", + "gapic-version": "0.2.6", + "id": "google-cloud-apihub", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "apihub_v1_grpc_service_config.json", + "service-yaml": "apihub_v1.yaml", + "transport": "rest" + }, + { + "apiPath": "google/cloud/asset" + }, + { + "apiPath": "google/cloud/asset/v1p1beta1", + "default-proto-package": "google.cloud.asset.v1", + "documentation-name": "cloudasset", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview", + "gapic-version": "3.30.1", + "id": "google-cloud-asset", + "reference-doc-includes": "asset_v1p5beta1+asset_v1p4beta1+asset_v1p1beta1+asset_v1p2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudasset_grpc_service_config.json", + "service-yaml": "cloudasset_v1p1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/asset/v1p7beta1", + "rest-numeric-enums": "True", + "retry-config": "cloudasset_grpc_service_config.json", + "service-yaml": "cloudasset_v1p7beta1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/asset/v1", + "default-proto-package": "google.cloud.asset.v1", + "documentation-name": "cloudasset", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview", + "gapic-version": "3.30.1", + "id": "google-cloud-asset", + "reference-doc-includes": "asset_v1p5beta1+asset_v1p4beta1+asset_v1p1beta1+asset_v1p2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudasset_grpc_service_config.json", + "service-yaml": "cloudasset_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/asset/v1p2beta1", + "default-proto-package": "google.cloud.asset.v1", + "documentation-name": "cloudasset", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview", + "gapic-version": "3.30.1", + "id": "google-cloud-asset", + "reference-doc-includes": "asset_v1p5beta1+asset_v1p4beta1+asset_v1p1beta1+asset_v1p2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudasset_grpc_service_config.json", + "service-yaml": "cloudasset_v1p2beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/asset/v1p5beta1", + "default-proto-package": "google.cloud.asset.v1", + "documentation-name": "cloudasset", + "documentation-uri": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview", + "gapic-version": "3.30.1", + "id": "google-cloud-asset", + "reference-doc-includes": "asset_v1p5beta1+asset_v1p4beta1+asset_v1p1beta1+asset_v1p2beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudasset_grpc_service_config.json", + "service-yaml": "cloudasset_v1p5beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networkservices" + }, + { + "apiPath": "google/cloud/networkservices/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "networkservices_v1beta1_grpc_service_config.json", + "service-yaml": "networkservices_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networkservices/v1", + "documentation-name": "networkservices", + "gapic-version": "0.5.22", + "id": "google-cloud-network-services", + "python-gapic-name": "network_services", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "networkservices_grpc_service_config.json", + "service-yaml": "networkservices_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-network-services" + }, + { + "apiPath": "google/cloud/netapp" + }, + { + "apiPath": "google/cloud/netapp/v1", + "documentation-name": "netapp", + "gapic-version": "0.3.23", + "id": "google-cloud-netapp", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "netapp_v1_grpc_service_config.json", + "service-yaml": "netapp_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/kms" + }, + { + "apiPath": "google/cloud/kms/logging/v1" + }, + { + "apiPath": "google/cloud/kms/v1", + "documentation-name": "cloudkms", + "documentation-uri": "https://cloud.google.com/kms", + "gapic-version": "3.5.1", + "id": "google-cloud-kms", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudkms_grpc_service_config.json", + "service-yaml": "cloudkms_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/kms/inventory" + }, + { + "api-description": "KMS Inventory API", + "apiPath": "google/cloud/kms/inventory/v1", + "documentation-name": "inventory", + "gapic-version": "0.2.15", + "id": "google-cloud-kms-inventory", + "python-gapic-name": "kms_inventory", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "kmsinventory_grpc_service_config.json", + "service-yaml": "kmsinventory_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/cloudsetup/logging/v1" + }, + { + "apiPath": "google/cloud/oslogin" + }, + { + "api-description": "Google Cloud OS Login", + "apiPath": "google/cloud/oslogin/common", + "default-proto-package": "google.cloud.oslogin.v1", + "documentation-name": "oslogin", + "documentation-uri": "https://cloud.google.com/compute/docs/oslogin/", + "gapic-version": "2.17.2", + "id": "google-cloud-os-login", + "reference-doc-includes": "oslogin_common", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "Google Cloud OS Login", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/oslogin/v1", + "default-proto-package": "google.cloud.oslogin.v1", + "documentation-name": "oslogin", + "documentation-uri": "https://cloud.google.com/compute/docs/oslogin/", + "gapic-version": "2.17.2", + "id": "google-cloud-os-login", + "reference-doc-includes": "oslogin_common", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "oslogin_grpc_service_config.json", + "service-yaml": "oslogin_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-os-login" + }, + { + "apiPath": "google/cloud/oslogin/v1beta", + "rest-numeric-enums": "True", + "retry-config": "oslogin_grpc_service_config.json", + "service-yaml": "oslogin_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securitycentermanagement" + }, + { + "apiPath": "google/cloud/securitycentermanagement/v1", + "documentation-name": "google-cloud-securitycentermanagement", + "gapic-version": "0.1.22", + "id": "google-cloud-securitycentermanagement", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "securitycentermanagement_v1_grpc_service_config.json", + "service-yaml": "securitycentermanagement_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/servicedirectory" + }, + { + "apiPath": "google/cloud/servicedirectory/v1beta1", + "default-proto-package": "google.cloud.servicedirectory.v1", + "documentation-name": "servicedirectory", + "documentation-uri": "https://cloud.google.com/service-directory/", + "gapic-version": "1.14.2", + "id": "google-cloud-service-directory", + "reference-doc-includes": "servicedirectory_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "servicedirectory_grpc_service_config.json", + "service-yaml": "servicedirectory_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-directory" + }, + { + "apiPath": "google/cloud/servicedirectory/v1", + "default-proto-package": "google.cloud.servicedirectory.v1", + "documentation-name": "servicedirectory", + "documentation-uri": "https://cloud.google.com/service-directory/", + "gapic-version": "1.14.2", + "id": "google-cloud-service-directory", + "reference-doc-includes": "servicedirectory_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "servicedirectory_grpc_service_config.json", + "service-yaml": "servicedirectory_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-directory" + }, + { + "apiPath": "google/cloud/recommender" + }, + { + "api-description": "delivers highly personalized product recommendations at scale.", + "apiPath": "google/cloud/recommender/v1beta1", + "default-proto-package": "google.cloud.recommender.v1", + "documentation-name": "recommender", + "documentation-uri": "https://cloud.google.com/recommender", + "gapic-version": "2.18.2", + "id": "google-cloud-recommender", + "reference-doc-includes": "recommender_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "recommender_grpc_service_config.json", + "service-yaml": "recommender_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/recommender/logging/v1beta1" + }, + { + "apiPath": "google/cloud/recommender/logging/v1" + }, + { + "api-description": "delivers highly personalized product recommendations at scale.", + "apiPath": "google/cloud/recommender/v1", + "default-proto-package": "google.cloud.recommender.v1", + "documentation-name": "recommender", + "documentation-uri": "https://cloud.google.com/recommender", + "gapic-version": "2.18.2", + "id": "google-cloud-recommender", + "reference-doc-includes": "recommender_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "recommender_grpc_service_config.json", + "service-yaml": "recommender_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/storagebatchoperations" + }, + { + "api-description": "null ", + "apiPath": "google/cloud/storagebatchoperations/v1", + "documentation-name": "google-cloud-storagebatchoperations", + "gapic-version": "0.1.3", + "id": "google-cloud-storagebatchoperations", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "storagebatchoperations_grpc_service_config.json", + "service-yaml": "storagebatchoperations_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/security/publicca" + }, + { + "apiPath": "google/cloud/security/publicca/v1alpha1", + "rest-numeric-enums": "True", + "retry-config": "publicca_v1alpha1_grpc_service_config.json", + "service-yaml": "publicca_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/security/publicca/v1beta1", + "default-proto-package": "google.cloud.security.publicca.v1", + "documentation-name": "publicca", + "documentation-uri": "https://cloud.google.com/certificate-manager/docs/public-ca", + "gapic-version": "0.3.18", + "id": "google-cloud-public-ca", + "reference-doc-includes": "publicca_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "publicca_v1beta1_grpc_service_config.json", + "service-yaml": "publicca_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-public-ca" + }, + { + "apiPath": "google/cloud/security/publicca/v1", + "default-proto-package": "google.cloud.security.publicca.v1", + "documentation-name": "publicca", + "gapic-version": "0.3.18", + "id": "google-cloud-public-ca", + "reference-doc-includes": "publicca_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "publicca_v1_grpc_service_config.json", + "service-yaml": "publicca_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/security/privateca" + }, + { + "api-description": "simplifies the deployment and management of private CAs without managing infrastructure.", + "apiPath": "google/cloud/security/privateca/v1beta1", + "default-proto-package": "google.cloud.security.privateca.v1", + "documentation-name": "privateca", + "documentation-uri": "https://cloud.google.com/certificate-authority-service", + "gapic-version": "1.14.3", + "id": "google-cloud-private-ca", + "reference-doc-includes": "privateca_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "privateca_grpc_service_config.json", + "service-yaml": "privateca_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-private-ca" + }, + { + "apiPath": "google/cloud/security/privateca/v1", + "default-proto-package": "google.cloud.security.privateca.v1", + "documentation-name": "privateca", + "documentation-uri": "https://cloud.google.com/certificate-authority-service", + "gapic-version": "1.14.3", + "id": "google-cloud-private-ca", + "reference-doc-includes": "privateca_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "privateca_grpc_service_config.json", + "service-yaml": "privateca_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-private-ca" + }, + { + "apiPath": "google/cloud/mediatranslation" + }, + { + "apiPath": "google/cloud/mediatranslation/v1alpha1" + }, + { + "api-description": "provides enterprise quality translation from/to various media types.", + "apiPath": "google/cloud/mediatranslation/v1beta1", + "documentation-name": "mediatranslation", + "documentation-uri": "https://cloud.google.com/media-translation", + "gapic-version": "0.11.17", + "id": "google-cloud-media-translation", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "mediatranslation_grpc_service_config.json", + "service-yaml": "mediatranslation_v1beta1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-media-translation" + }, + { + "apiPath": "google/cloud/servicehealth" + }, + { + "apiPath": "google/cloud/servicehealth/logging/v1" + }, + { + "apiPath": "google/cloud/servicehealth/v1", + "documentation-name": "google-cloud-servicehealth", + "gapic-version": "0.1.12", + "id": "google-cloud-servicehealth", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "servicehealth_v1_grpc_service_config.json", + "service-yaml": "servicehealth_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/batch" + }, + { + "apiPath": "google/cloud/batch/v1alpha", + "default-proto-package": "google.cloud.batch.v1", + "documentation-name": "batch", + "documentation-uri": "https://cloud.google.com/batch/docs", + "gapic-version": "0.17.36", + "id": "google-cloud-batch", + "reference-doc-includes": "batch_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "batch_v1alpha_grpc_service_config.json", + "service-yaml": "batch_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/batch/v1", + "default-proto-package": "google.cloud.batch.v1", + "documentation-name": "batch", + "documentation-uri": "https://cloud.google.com/batch/docs", + "gapic-version": "0.17.36", + "id": "google-cloud-batch", + "reference-doc-includes": "batch_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "batch_v1_grpc_service_config.json", + "service-yaml": "batch_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/secretmanager" + }, + { + "apiPath": "google/cloud/secretmanager/v1beta2", + "default-proto-package": "google.cloud.secretmanager.v1", + "documentation-name": "secretmanager", + "gapic-version": "2.24.0", + "id": "google-cloud-secret-manager", + "reference-doc-includes": "secretmanager_v1beta2+secrets_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "secretmanager_grpc_service_config.json", + "service-yaml": "secretmanager_v1beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/secretmanager/logging/v1" + }, + { + "apiPath": "google/cloud/secretmanager/v1", + "default-proto-package": "google.cloud.secretmanager.v1", + "documentation-name": "secretmanager", + "gapic-version": "2.24.0", + "id": "google-cloud-secret-manager", + "reference-doc-includes": "secretmanager_v1beta2+secrets_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "secretmanager_grpc_service_config.json", + "service-yaml": "secretmanager_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-secret-manager" + }, + { + "apiPath": "google/cloud/dataproc" + }, + { + "apiPath": "google/cloud/dataproc/logging", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/dataproc/v1", + "documentation-name": "dataproc", + "documentation-uri": "https://cloud.google.com/dataproc", + "gapic-version": "5.20.0", + "id": "google-cloud-dataproc", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dataproc_grpc_service_config.json", + "service-yaml": "dataproc_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/visionai" + }, + { + "api-description": "Easily build and deploy Vertex AI Vision applications using a single platform.", + "apiPath": "google/cloud/visionai/v1alpha1", + "default-proto-package": "google.cloud.visionai.v1", + "documentation-name": "google-cloud-visionai", + "documentation-uri": "https://cloud.google.com/vision-ai/docs", + "gapic-version": "0.1.10", + "id": "google-cloud-visionai", + "reference-doc-includes": "visionai_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "visionai_grpc_service_config.json", + "service-yaml": "visionai_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "Easily build and deploy Vertex AI Vision applications using a single platform.", + "apiPath": "google/cloud/visionai/v1", + "default-proto-package": "google.cloud.visionai.v1", + "documentation-name": "google-cloud-visionai", + "gapic-version": "0.1.10", + "id": "google-cloud-visionai", + "reference-doc-includes": "visionai_v1alpha1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "visionai_grpc_service_config.json", + "service-yaml": "visionai_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/licensemanager/v1", + "rest-numeric-enums": "True", + "retry-config": "licensemanager_v1_grpc_service_config.json", + "service-yaml": "licensemanager_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/language" + }, + { + "apiPath": "google/cloud/language/v1beta1" + }, + { + "apiPath": "google/cloud/language/v1beta2", + "default-proto-package": "google.cloud.language.v1", + "documentation-name": "language", + "documentation-uri": "https://cloud.google.com/natural-language/docs/", + "gapic-version": "2.17.2", + "id": "google-cloud-language", + "reference-doc-includes": "language_v1beta2+language_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "language_grpc_service_config.json", + "service-yaml": "language_v1beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/language/v1", + "default-proto-package": "google.cloud.language.v1", + "documentation-name": "language", + "gapic-version": "2.17.2", + "id": "google-cloud-language", + "reference-doc-includes": "language_v1beta2+language_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "language_grpc_service_config.json", + "service-yaml": "language_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/language/v2", + "default-proto-package": "google.cloud.language.v1", + "documentation-name": "language", + "gapic-version": "2.17.2", + "id": "google-cloud-language", + "reference-doc-includes": "language_v1beta2+language_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "language_grpc_service_config.json", + "service-yaml": "language_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/blockchainnodeengine/v1", + "rest-numeric-enums": "True", + "retry-config": "blockchainnodeengine_v1_grpc_service_config.json", + "service-yaml": "blockchainnodeengine_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/financialservices" + }, + { + "api-description": "Google Cloud's Anti Money Laundering AI (AML AI) product is an API that scores AML risk. Use it to identify more risk, more defensibly, with fewer false positives and reduced time per review.", + "apiPath": "google/cloud/financialservices/v1", + "documentation-name": "google-cloud-financialservices", + "gapic-version": "0.1.2", + "id": "google-cloud-financialservices", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "financialservices_v1_grpc_service_config.json", + "service-yaml": "financialservices_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/documentai" + }, + { + "apiPath": "google/cloud/documentai/v1", + "default-proto-package": "google.cloud.documentai.v1", + "documentation-name": "documentai", + "gapic-version": "3.5.0", + "id": "google-cloud-documentai", + "reference-doc-includes": "documentai_v1beta3", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "documentai_v1_grpc_service_config.json", + "service-yaml": "documentai_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/documentai/v1beta3", + "default-proto-package": "google.cloud.documentai.v1", + "documentation-name": "documentai", + "gapic-version": "3.5.0", + "id": "google-cloud-documentai", + "reference-doc-includes": "documentai_v1beta3", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "documentai_v1beta3_grpc_service_config.json", + "service-yaml": "documentai_v1beta3.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/connectors" + }, + { + "apiPath": "google/cloud/connectors/v1", + "rest-numeric-enums": "True", + "retry-config": "connectors_grpc_service_config.json", + "service-yaml": "connectors_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vision" + }, + { + "apiPath": "google/cloud/vision/v1p1beta1", + "default-proto-package": "google.cloud.vision.v1", + "documentation-name": "vision", + "documentation-uri": "https://cloud.google.com/vision/docs/", + "gapic-version": "3.10.2", + "id": "google-cloud-vision", + "reference-doc-includes": "vision_v1p3beta1+vision_v1p4beta1+vision_v1p2beta1+vision_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vision_grpc_service_config.json", + "service-yaml": "vision_v1p1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vision/v1p3beta1", + "default-proto-package": "google.cloud.vision.v1", + "documentation-name": "vision", + "documentation-uri": "https://cloud.google.com/vision/docs/", + "gapic-version": "3.10.2", + "id": "google-cloud-vision", + "reference-doc-includes": "vision_v1p3beta1+vision_v1p4beta1+vision_v1p2beta1+vision_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vision_grpc_service_config.json", + "service-yaml": "vision_v1p3beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vision/v1p4beta1", + "default-proto-package": "google.cloud.vision.v1", + "documentation-name": "vision", + "documentation-uri": "https://cloud.google.com/vision/docs/", + "gapic-version": "3.10.2", + "id": "google-cloud-vision", + "reference-doc-includes": "vision_v1p3beta1+vision_v1p4beta1+vision_v1p2beta1+vision_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vision_grpc_service_config.json", + "service-yaml": "vision_v1p4beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vision/v1", + "default-proto-package": "google.cloud.vision.v1", + "documentation-name": "vision", + "documentation-uri": "https://cloud.google.com/vision/docs/", + "gapic-version": "3.10.2", + "id": "google-cloud-vision", + "reference-doc-includes": "vision_v1p3beta1+vision_v1p4beta1+vision_v1p2beta1+vision_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vision_grpc_service_config.json", + "service-yaml": "vision_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/vision/v1p2beta1", + "default-proto-package": "google.cloud.vision.v1", + "documentation-name": "vision", + "documentation-uri": "https://cloud.google.com/vision/docs/", + "gapic-version": "3.10.2", + "id": "google-cloud-vision", + "reference-doc-includes": "vision_v1p3beta1+vision_v1p4beta1+vision_v1p2beta1+vision_v1p1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "vision_grpc_service_config.json", + "service-yaml": "vision_v1p2beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securitycenter" + }, + { + "apiPath": "google/cloud/securitycenter/v1p1beta1", + "default-proto-package": "google.cloud.securitycenter.v1", + "documentation-name": "securitycenter", + "documentation-uri": "https://cloud.google.com/security-command-center", + "gapic-version": "1.38.1", + "id": "google-cloud-securitycenter", + "reference-doc-includes": "securitycenter_v1p1beta1+securitycenter_v2+securitycenter_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "securitycenter_grpc_service_config.json", + "service-yaml": "securitycenter_v1p1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securitycenter/settings/v1beta1", + "rest-numeric-enums": "False", + "retry-config": "securitycenter_settings_grpc_service_config.json", + "service-yaml": "securitycenter_settings.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/securitycenter/v1beta1", + "default-proto-package": "google.cloud.securitycenter.v1", + "documentation-name": "securitycenter", + "documentation-uri": "https://cloud.google.com/security-command-center", + "gapic-version": "1.38.1", + "id": "google-cloud-securitycenter", + "reference-doc-includes": "securitycenter_v1p1beta1+securitycenter_v2+securitycenter_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "securitycenter_grpc_service_config.json", + "service-yaml": "securitycenter_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securitycenter/v1", + "default-proto-package": "google.cloud.securitycenter.v1", + "documentation-name": "securitycenter", + "gapic-version": "1.38.1", + "id": "google-cloud-securitycenter", + "reference-doc-includes": "securitycenter_v1p1beta1+securitycenter_v2+securitycenter_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "securitycenter_grpc_service_config.json", + "service-yaml": "securitycenter_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/securitycenter/v2", + "default-proto-package": "google.cloud.securitycenter.v1", + "documentation-name": "securitycenter", + "gapic-version": "1.38.1", + "id": "google-cloud-securitycenter", + "reference-doc-includes": "securitycenter_v1p1beta1+securitycenter_v2+securitycenter_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "service-yaml": "securitycenter_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/audit" + }, + { + "apiPath": "google/cloud/networkconnectivity" + }, + { + "apiPath": "google/cloud/networkconnectivity/v1alpha1", + "default-proto-package": "google.cloud.networkconnectivity.v1", + "documentation-name": "networkconnectivity", + "documentation-uri": "https://cloud.google.com/network-connectivity/", + "gapic-version": "2.8.1", + "id": "google-cloud-network-connectivity", + "reference-doc-includes": "networkconnectivity_v1alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "networkconnectivity_grpc_service_config.json", + "service-yaml": "networkconnectivity_v1alpha1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-network-connectivity" + }, + { + "apiPath": "google/cloud/networkconnectivity/v1", + "default-proto-package": "google.cloud.networkconnectivity.v1", + "documentation-name": "networkconnectivity", + "documentation-uri": "https://cloud.google.com/network-connectivity/", + "gapic-version": "2.8.1", + "id": "google-cloud-network-connectivity", + "reference-doc-includes": "networkconnectivity_v1alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "networkconnectivity_v1_grpc_service_config.json", + "service-yaml": "networkconnectivity_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-network-connectivity" + }, + { + "apiPath": "google/cloud/dataqna" + }, + { + "apiPath": "google/cloud/dataqna/v1alpha", + "documentation-name": "dataqna", + "documentation-uri": "https://cloud.google.com/bigquery/docs/dataqna", + "gapic-version": "0.10.17", + "id": "google-cloud-data-qna", + "release-level": "preview", + "rest-numeric-enums": "False", + "retry-config": "dataqna_grpc_service_config.json", + "service-yaml": "dataqna_v1alpha.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-data-qna" + }, + { + "apiPath": "google/cloud/tasks" + }, + { + "apiPath": "google/cloud/tasks/v2beta3", + "default-proto-package": "google.cloud.tasks.v2", + "documentation-name": "cloudtasks", + "documentation-uri": "https://cloud.google.com/tasks/docs/", + "gapic-version": "2.19.3", + "id": "google-cloud-tasks", + "reference-doc-includes": "tasks_v2beta3+tasks_v2beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudtasks_grpc_service_config.json", + "service-yaml": "cloudtasks_v2beta3.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/tasks/v2", + "default-proto-package": "google.cloud.tasks.v2", + "documentation-name": "cloudtasks", + "documentation-uri": "https://cloud.google.com/tasks/docs/", + "gapic-version": "2.19.3", + "id": "google-cloud-tasks", + "reference-doc-includes": "tasks_v2beta3+tasks_v2beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudtasks_grpc_service_config.json", + "service-yaml": "cloudtasks_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/tasks/v2beta2", + "default-proto-package": "google.cloud.tasks.v2", + "documentation-name": "cloudtasks", + "documentation-uri": "https://cloud.google.com/tasks/docs/", + "gapic-version": "2.19.3", + "id": "google-cloud-tasks", + "reference-doc-includes": "tasks_v2beta3+tasks_v2beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudtasks_grpc_service_config.json", + "service-yaml": "cloudtasks_v2beta2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/networksecurity" + }, + { + "apiPath": "google/cloud/networksecurity/v1beta1", + "default-proto-package": "google.cloud.networksecurity.v1", + "documentation-name": "networksecurity", + "documentation-uri": "https://cloud.google.com/traffic-director/docs/reference/network-security/rest", + "gapic-version": "0.9.18", + "id": "google-cloud-network-security", + "python-gapic-name": "network_security", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "networksecurity_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "networksecurity_v1beta1_grpc_service_config.json", + "service-yaml": "networksecurity_v1beta1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-network-security" + }, + { + "apiPath": "google/cloud/networksecurity/v1", + "default-proto-package": "google.cloud.networksecurity.v1", + "documentation-name": "networksecurity", + "documentation-uri": "https://cloud.google.com/traffic-director/docs/reference/network-security/rest", + "gapic-version": "0.9.18", + "id": "google-cloud-network-security", + "python-gapic-name": "network_security", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "networksecurity_v1beta1", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "networksecurity_v1_grpc_service_config.json", + "service-yaml": "networksecurity_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-network-security" + }, + { + "apiPath": "google/cloud/privilegedaccessmanager" + }, + { + "apiPath": "google/cloud/privilegedaccessmanager/v1", + "documentation-name": "google-cloud-privilegedaccessmanager", + "gapic-version": "0.1.8", + "id": "google-cloud-privilegedaccessmanager", + "release-level": "preview", + "rest-numeric-enums": "True", + "service-yaml": "privilegedaccessmanager_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/storageinsights" + }, + { + "apiPath": "google/cloud/storageinsights/v1", + "documentation-name": "storageinsights", + "gapic-version": "0.1.16", + "id": "google-cloud-storageinsights", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "storageinsights_grpc_service_config.json", + "service-yaml": "storageinsights_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/apigeeconnect" + }, + { + "api-description": "allows the Apigee hybrid management plane to connect securely to the MART service in the runtime plane without requiring you to expose the MART endpoint on the internet.", + "apiPath": "google/cloud/apigeeconnect/v1", + "documentation-name": "apigeeconnect", + "documentation-uri": "https://cloud.google.com/apigee/docs/hybrid/v1.4/apigee-connect", + "gapic-version": "1.12.2", + "id": "google-cloud-apigee-connect", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "connection_grpc_service_config.json", + "service-yaml": "apigeeconnect_v1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-apigee-connect" + }, + { + "apiPath": "google/cloud/modelarmor/v1", + "default-proto-package": "google.cloud.modelarmor.v1", + "documentation-name": "google-cloud-modelarmor", + "gapic-version": "0.2.5", + "id": "google-cloud-modelarmor", + "reference-doc-includes": "modelarmor_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "modelarmor_v1_grpc_service_config.json", + "service-yaml": "modelarmor_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/modelarmor/v1beta", + "default-proto-package": "google.cloud.modelarmor.v1", + "documentation-name": "google-cloud-modelarmor", + "gapic-version": "0.2.5", + "id": "google-cloud-modelarmor", + "reference-doc-includes": "modelarmor_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "modelarmor_v1beta_grpc_service_config.json", + "service-yaml": "modelarmor_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/config" + }, + { + "apiPath": "google/cloud/config/v1", + "documentation-name": "config", + "gapic-version": "0.1.18", + "id": "google-cloud-config", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "config_grpc_service_config.json", + "service-yaml": "config_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/eventarc" + }, + { + "apiPath": "google/cloud/eventarc/logging/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/eventarc/v1", + "documentation-name": "eventarc", + "documentation-uri": "https://cloud.google.com/eventarc/", + "gapic-version": "1.15.3", + "id": "google-cloud-eventarc", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "eventarc_grpc_service_config.json", + "service-yaml": "eventarc_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/eventarc/publishing" + }, + { + "apiPath": "google/cloud/eventarc/publishing/v1", + "documentation-name": "eventarcpublishing", + "documentation-uri": "https://cloud.google.com/eventarc/docs", + "gapic-version": "0.6.19", + "id": "google-cloud-eventarc-publishing", + "python-gapic-name": "eventarc_publishing", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "eventarcpublishing_grpc_service_config.json", + "service-yaml": "eventarcpublishing_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-eventarc-publishing" + }, + { + "apiPath": "google/cloud/beyondcorp/appconnectors" + }, + { + "apiPath": "google/cloud/beyondcorp/appconnectors/v1", + "documentation-name": "beyondcorpappconnectors", + "documentation-uri": "https://cloud.google.com/beyondcorp/", + "gapic-version": "0.4.18", + "id": "google-cloud-beyondcorp-appconnectors", + "python-gapic-name": "beyondcorp_appconnectors", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "beyondcorp-appconnectors_grpc_service_config.json", + "service-yaml": "beyondcorp_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-beyondcorp-appconnectors" + }, + { + "apiPath": "google/cloud/beyondcorp/appgateways" + }, + { + "apiPath": "google/cloud/beyondcorp/appgateways/v1", + "documentation-name": "beyondcorpappgateways", + "documentation-uri": "https://cloud.google.com/beyondcorp/", + "gapic-version": "0.4.18", + "id": "google-cloud-beyondcorp-appgateways", + "python-gapic-name": "beyondcorp_appgateways", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "beyondcorp-appgateways_grpc_service_config.json", + "service-yaml": "beyondcorp_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-beyondcorp-appgateways" + }, + { + "apiPath": "google/cloud/beyondcorp/clientconnectorservices" + }, + { + "apiPath": "google/cloud/beyondcorp/clientconnectorservices/v1", + "documentation-name": "beyondcorpclientconnectorservices", + "documentation-uri": "https://cloud.google.com/beyondcorp/", + "gapic-version": "0.4.18", + "id": "google-cloud-beyondcorp-clientconnectorservices", + "python-gapic-name": "beyondcorp_clientconnectorservices", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "beyondcorp-clientconnectorservices_grpc_service_config.json", + "service-yaml": "beyondcorp_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-beyondcorp-clientconnectorservices" + }, + { + "apiPath": "google/cloud/beyondcorp/appconnections" + }, + { + "apiPath": "google/cloud/beyondcorp/appconnections/v1", + "documentation-name": "beyondcorpappconnections", + "documentation-uri": "https://cloud.google.com/beyondcorp/", + "gapic-version": "0.4.18", + "id": "google-cloud-beyondcorp-appconnections", + "python-gapic-name": "beyondcorp_appconnections", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "beyondcorp-appconnections_grpc_service_config.json", + "service-yaml": "beyondcorp_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-beyondcorp-appconnections" + }, + { + "apiPath": "google/cloud/beyondcorp/clientgateways" + }, + { + "apiPath": "google/cloud/beyondcorp/clientgateways/v1", + "documentation-name": "beyondcorpclientgateways", + "documentation-uri": "https://cloud.google.com/beyondcorp/", + "gapic-version": "0.4.17", + "id": "google-cloud-beyondcorp-clientgateways", + "python-gapic-name": "beyondcorp_clientgateways", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "beyondcorp-clientgateways_grpc_service_config.json", + "service-yaml": "beyondcorp_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-beyondcorp-clientgateways" + }, + { + "apiPath": "google/cloud/confidentialcomputing" + }, + { + "apiPath": "google/cloud/confidentialcomputing/v1alpha1", + "rest-numeric-enums": "True", + "retry-config": "confidentialcomputing_v1alpha1_grpc_service_config.json", + "service-yaml": "confidentialcomputing_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/confidentialcomputing/v1", + "documentation-name": "confidentialcomputing", + "gapic-version": "0.4.18", + "id": "google-cloud-confidentialcomputing", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "confidentialcomputing_v1_grpc_service_config.json", + "service-yaml": "confidentialcomputing_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/dataplex" + }, + { + "apiPath": "google/cloud/dataplex/v1", + "documentation-name": "dataplex", + "gapic-version": "2.10.2", + "id": "google-cloud-dataplex", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dataplex_grpc_service_config.json", + "service-yaml": "dataplex_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/tpu" + }, + { + "apiPath": "google/cloud/tpu/v2alpha1", + "default-proto-package": "google.cloud.tpu.v1", + "documentation-name": "tpu", + "documentation-uri": "https://cloud.google.com/tpu/", + "gapic-version": "1.23.2", + "id": "google-cloud-tpu", + "reference-doc-includes": "tpu_v2+tpu_v2alpha1", + "release-level": "stable", + "rest-numeric-enums": "False", + "retry-config": "tpu_grpc_service_config.json", + "service-yaml": "tpu_v2alpha1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/tpu/v1", + "default-proto-package": "google.cloud.tpu.v1", + "documentation-name": "tpu", + "documentation-uri": "https://cloud.google.com/tpu/", + "gapic-version": "1.23.2", + "id": "google-cloud-tpu", + "reference-doc-includes": "tpu_v2+tpu_v2alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "tpu_grpc_service_config.json", + "service-yaml": "tpu_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/cloud/tpu/v2", + "default-proto-package": "google.cloud.tpu.v1", + "documentation-name": "tpu", + "documentation-uri": "https://cloud.google.com/tpu/", + "gapic-version": "1.23.2", + "id": "google-cloud-tpu", + "reference-doc-includes": "tpu_v2+tpu_v2alpha1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "tpu_grpc_service_config.json", + "service-yaml": "tpu_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/cloud/phishingprotection" + }, + { + "api-description": "helps prevent users from accessing phishing sites by identifying various signals associated with malicious content, including the use of your brand assets, classifying malicious content that uses your brand and reporting the unsafe URLs to Google Safe Browsing. Once a site is propagated to Safe Browsing, users will see warnings across more than 4 billion devices.", + "apiPath": "google/cloud/phishingprotection/v1beta1", + "documentation-name": "phishingprotection", + "documentation-uri": "https://cloud.google.com/phishing-protection/docs/", + "gapic-version": "1.14.2", + "id": "google-cloud-phishing-protection", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "phishingprotection_grpc_service_config.json", + "service-yaml": "phishingprotection_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-phishing-protection" + }, + { + "apiPath": "google/cloud/pubsublite/v1", + "rest-numeric-enums": "False", + "retry-config": "pubsublite_grpc_service_config.json", + "service-yaml": "pubsublite_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/pubsub" + }, + { + "apiPath": "google/pubsub/v1", + "rest-numeric-enums": "True", + "retry-config": "pubsub_grpc_service_config.json", + "service-yaml": "pubsub_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-pubsub" + }, + { + "apiPath": "google/privacy/dlp" + }, + { + "apiPath": "google/privacy/dlp/v2", + "documentation-name": "dlp", + "documentation-uri": "https://cloud.google.com/dlp/docs/", + "gapic-version": "3.31.0", + "id": "google-cloud-dlp", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dlp_grpc_service_config.json", + "service-yaml": "dlp_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/monitoring" + }, + { + "apiPath": "google/monitoring/dashboard" + }, + { + "apiPath": "google/monitoring/dashboard/v1", + "documentation-name": "monitoring-dashboards", + "documentation-uri": "https://cloud.google.com/monitoring/dashboards/", + "gapic-version": "2.18.2", + "id": "google-cloud-monitoring-dashboards", + "python-gapic-name": "monitoring_dashboard", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "dashboards_grpc_service_config.json", + "service-yaml": "monitoring.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-monitoring-dashboards" + }, + { + "apiPath": "google/monitoring/v3", + "documentation-name": "monitoring", + "documentation-uri": "https://cloud.google.com/monitoring/docs", + "gapic-version": "2.27.2", + "id": "google-cloud-monitoring", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "monitoring_grpc_service_config.json", + "service-yaml": "monitoring.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/monitoring/metricsscope" + }, + { + "apiPath": "google/monitoring/metricsscope/v1", + "documentation-name": "google-cloud-monitoring-metrics-scopes", + "documentation-uri": "https://cloud.google.com/monitoring/docs", + "gapic-version": "1.9.2", + "id": "google-cloud-monitoring-metrics-scopes", + "python-gapic-name": "monitoring_metrics_scope", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "metricsscopes_grpc_service_config.json", + "service-yaml": "monitoring.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-monitoring-metrics-scopes" + }, + { + "apiPath": "google/partner/aistreams/v1alpha1", + "rest-numeric-enums": "True", + "retry-config": "aistreams_grpc_service_config.json", + "service-yaml": "aistreams_v1alpha1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/identity/accesscontextmanager" + }, + { + "apiPath": "google/identity/accesscontextmanager/type" + }, + { + "apiPath": "google/identity/accesscontextmanager/v1", + "rest-numeric-enums": "True", + "retry-config": "accesscontextmanager_grpc_service_config.json", + "service-yaml": "accesscontextmanager_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps" + }, + { + "apiPath": "google/maps/roads/v1op", + "rest-numeric-enums": "True", + "retry-config": "roads_grpc_service_config.json", + "service-yaml": "roads_v1op.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/maps/addressvalidation/v1", + "documentation-name": "addressvalidation", + "documentation-uri": "https://mapsplatform.google.com/maps-products/address-validation/", + "gapic-version": "0.3.19", + "id": "google-maps-addressvalidation", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "addressvalidation_grpc_service_config.json", + "service-yaml": "addressvalidation_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/routespreferred/v1" + }, + { + "apiPath": "google/maps/solar/v1", + "documentation-name": "google-maps-solar", + "gapic-version": "0.1.8", + "id": "google-maps-solar", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "solar_grpc_service_config.json", + "service-yaml": "solar_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/playablelocations/v3" + }, + { + "apiPath": "google/maps/playablelocations/v3/sample" + }, + { + "apiPath": "google/maps/places/v1", + "autogen-snippets": "False", + "documentation-name": "places", + "gapic-version": "0.2.1", + "id": "google-maps-places", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "places_grpc_service_config.json", + "service-yaml": "places_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/mobilitybilling/logs/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/routes/v1alpha" + }, + { + "apiPath": "google/maps/routes/v1", + "rest-numeric-enums": "True", + "retry-config": "routes_grpc_service_config.json", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/regionlookup/v1alpha", + "rest-numeric-enums": "True", + "retry-config": "regionlookup_grpc_service_config.json", + "service-yaml": "regionlookup_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/routeoptimization/v1", + "documentation-name": "google-maps-routeoptimization", + "gapic-version": "0.1.11", + "id": "google-maps-routeoptimization", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "routeoptimization_v1_grpc_service_config.json", + "service-yaml": "routeoptimization_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/fleetengine" + }, + { + "apiPath": "google/maps/fleetengine/v1", + "python-gapic-namespace": "google.maps", + "rest-numeric-enums": "True", + "retry-config": "fleetengine_grpc_service_config.json", + "service-yaml": "fleetengine_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/maps/fleetengine/delivery" + }, + { + "apiPath": "google/maps/fleetengine/delivery/v1", + "python-gapic-name": "fleetengine_delivery", + "python-gapic-namespace": "google.maps", + "rest-numeric-enums": "True", + "retry-config": "fleetengine_delivery_grpc_service_config.json", + "service-yaml": "fleetengine_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/unity" + }, + { + "apiPath": "google/maps/areainsights/v1", + "documentation-name": "google-maps-areainsights", + "gapic-version": "0.1.8", + "id": "google-maps-areainsights", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "areainsights_grpc_service_config.json", + "service-yaml": "areainsights_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/routing/v2", + "documentation-name": "routing", + "documentation-uri": "https://mapsplatform.google.com/maps-products/#routes-section", + "gapic-version": "0.6.16", + "id": "google-maps-routing", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "library_grpc_service_config.json", + "service-yaml": "routes_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/weather/v1", + "rest-numeric-enums": "True", + "retry-config": "weather_grpc_service_config.json", + "service-yaml": "weather_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/aerialview/v1", + "rest-numeric-enums": "True", + "retry-config": "aerialview_grpc_service_config.json", + "service-yaml": "aerialview_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/maps/mapsplatformdatasets/v1", + "documentation-name": "mapsplatformdatasets", + "gapic-version": "0.4.8", + "id": "google-maps-mapsplatformdatasets", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "mapsplatformdatasets_grpc_service_config.json", + "service-yaml": "mapsplatformdatasets_v1.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "", + "apiPath": "google/geo/type", + "documentation-name": "geotype", + "documentation-uri": "https://mapsplatform.google.com/maps-products", + "gapic-version": "0.3.13", + "id": "google-geo-type", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Geo Type Protos", + "transport": "grpc" + }, + { + "apiPath": "google/networking/trafficdirector/type" + }, + { + "apiPath": "google/rpc" + }, + { + "apiPath": "google/rpc/context" + }, + { + "apiPath": "google/appengine" + }, + { + "api-description": "App Engine Logging Protos", + "apiPath": "google/appengine/logging/v1", + "documentation-name": "appenginelogging", + "documentation-uri": "https://cloud.google.com/logging/docs/reference/v2/rpc/google.appengine.logging.v1", + "gapic-version": "1.6.2", + "id": "google-cloud-appengine-logging", + "python-gapic-name": "appengine_logging", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "App Engine Logging Protos", + "transport": "grpc", + "warehouse-package-name": "google-cloud-appengine-logging" + }, + { + "apiPath": "google/appengine/v1", + "documentation-name": "appengine", + "documentation-uri": "https://cloud.google.com/appengine/docs/admin-api/", + "gapic-version": "1.14.2", + "id": "google-cloud-appengine-admin", + "python-gapic-name": "appengine_admin", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "appengine_grpc_service_config.json", + "service-yaml": "appengine_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-appengine-admin" + }, + { + "apiPath": "google/appengine/legacy" + }, + { + "apiPath": "google/appengine/v1beta" + }, + { + "apiPath": "google/compute/logging/gdnsusage/v1" + }, + { + "apiPath": "google/compute/logging/dr/v1" + }, + { + "apiPath": "google/actions/type" + }, + { + "apiPath": "google/actions/sdk/v2" + }, + { + "apiPath": "google/actions/sdk/v2/conversation" + }, + { + "apiPath": "google/actions/sdk/v2/conversation/prompt" + }, + { + "apiPath": "google/actions/sdk/v2/conversation/prompt/content" + }, + { + "apiPath": "google/actions/sdk/v2/interactionmodel" + }, + { + "apiPath": "google/actions/sdk/v2/interactionmodel/type" + }, + { + "apiPath": "google/actions/sdk/v2/interactionmodel/prompt" + }, + { + "apiPath": "google/actions/sdk/v2/interactionmodel/prompt/content" + }, + { + "apiPath": "google/streetview/publish" + }, + { + "apiPath": "google/streetview/publish/v1", + "rest-numeric-enums": "True", + "retry-config": "streetview_publish_grpc_service_config.json", + "service-yaml": "streetviewpublish.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/spanner" + }, + { + "apiPath": "google/spanner/admin/instance" + }, + { + "apiPath": "google/spanner/admin/instance/v1", + "python-gapic-name": "spanner_admin_instance", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "spanner_admin_instance_grpc_service_config.json", + "service-yaml": "spanner.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/spanner/admin/database" + }, + { + "apiPath": "google/spanner/admin/database/v1", + "python-gapic-name": "spanner_admin_database", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "spanner_admin_database_grpc_service_config.json", + "service-yaml": "spanner.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/spanner/v1", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "spanner_grpc_service_config.json", + "service-yaml": "spanner.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/spanner/adapter/v1", + "rest-numeric-enums": "True", + "retry-config": "spanner_adapter_grpc_service_config.json", + "service-yaml": "spanner.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/spanner/executor/v1", + "retry-config": "spanner_cloud_executor_grpc_service_config.json", + "service-yaml": "spanner_cloud_executor.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/longrunning" + }, + { + "apiPath": "google/api" + }, + { + "apiPath": "google/api/apikeys" + }, + { + "apiPath": "google/api/apikeys/v2", + "documentation-name": "apikeys", + "documentation-uri": "https://cloud.google.com/api-keys/docs", + "gapic-version": "0.5.17", + "id": "google-cloud-api-keys", + "python-gapic-name": "api_keys", + "python-gapic-namespace": "google.cloud", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "apikeys_grpc_service_config.json", + "service-yaml": "apikeys_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-api-keys" + }, + { + "apiPath": "google/api/servicemanagement" + }, + { + "apiPath": "google/api/servicemanagement/v1", + "documentation-name": "servicemanagement", + "documentation-uri": "https://cloud.google.com/service-infrastructure/docs/overview/", + "gapic-version": "1.13.2", + "id": "google-cloud-service-management", + "python-gapic-name": "servicemanagement", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "servicemanagement_grpc_service_config.json", + "service-yaml": "servicemanagement_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-management" + }, + { + "apiPath": "google/api/expr" + }, + { + "apiPath": "google/api/expr/v1alpha1" + }, + { + "apiPath": "google/api/expr/v1beta1" + }, + { + "apiPath": "google/api/expr/conformance/v1alpha1" + }, + { + "apiPath": "google/api/cloudquotas" + }, + { + "apiPath": "google/api/cloudquotas/v1", + "default-proto-package": "google.api.cloudquotas.v1", + "documentation-name": "google-cloud-cloudquotas", + "gapic-version": "0.1.18", + "id": "google-cloud-quotas", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cloudquotas_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "cloudquotas_v1_grpc_service_config.json", + "service-yaml": "cloudquotas_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-quotas" + }, + { + "apiPath": "google/api/cloudquotas/v1beta", + "default-proto-package": "google.api.cloudquotas.v1", + "documentation-name": "google-cloud-cloudquotas", + "gapic-version": "0.1.18", + "id": "google-cloud-quotas", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "cloudquotas_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "cloudquotas_v1beta_grpc_service_config.json", + "service-yaml": "cloudquotas_v1beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-quotas" + }, + { + "apiPath": "google/api/serviceusage" + }, + { + "apiPath": "google/api/serviceusage/v1beta1", + "python-gapic-name": "service_usage", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "serviceusage_grpc_service_config.json", + "service-yaml": "serviceusage_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-usage" + }, + { + "apiPath": "google/api/serviceusage/v1", + "documentation-name": "serviceusage", + "documentation-uri": "https://cloud.google.com/service-usage", + "gapic-version": "1.13.1", + "id": "google-cloud-service-usage", + "python-gapic-name": "service_usage", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "serviceusage_grpc_service_config.json", + "service-yaml": "serviceusage_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-usage" + }, + { + "apiPath": "google/api/servicecontrol" + }, + { + "apiPath": "google/api/servicecontrol/v1", + "default-proto-package": "google.api.servicecontrol.v1", + "documentation-name": "servicecontrol", + "documentation-uri": "https://cloud.google.com/service-infrastructure/docs/overview/", + "gapic-version": "1.15.1", + "id": "google-cloud-service-control", + "python-gapic-name": "servicecontrol", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "servicecontrol_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "servicecontrol_grpc_service_config.json", + "service-yaml": "servicecontrol.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-control" + }, + { + "apiPath": "google/api/servicecontrol/v2", + "default-proto-package": "google.api.servicecontrol.v1", + "documentation-name": "servicecontrol", + "documentation-uri": "https://cloud.google.com/service-infrastructure/docs/overview/", + "gapic-version": "1.15.1", + "id": "google-cloud-service-control", + "python-gapic-name": "servicecontrol", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "servicecontrol_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "servicecontrol_grpc_service_config.json", + "service-yaml": "servicecontrol.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-service-control" + }, + { + "apiPath": "google/bytestream" + }, + { + "apiPath": "google/storage/platformlogs/v1", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/storage/control" + }, + { + "apiPath": "google/storage/control/v2", + "documentation-name": "google-cloud-storage-control", + "gapic-version": "1.5.0", + "id": "google-cloud-storage-control", + "python-gapic-name": "storage_control", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "storage_control_grpc_service_config.json", + "service-yaml": "storage_v2.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-storage-control" + }, + { + "apiPath": "google/storage/v1" + }, + { + "apiPath": "google/storage/v2", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "storage_grpc_service_config.json", + "service-yaml": "storage_v2.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/datastore" + }, + { + "apiPath": "google/datastore/admin" + }, + { + "apiPath": "google/datastore/admin/v1", + "python-gapic-name": "datastore_admin", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "datastore_admin_grpc_service_config.json", + "service-yaml": "datastore_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-datastore" + }, + { + "apiPath": "google/datastore/v1", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "datastore_grpc_service_config.json", + "service-yaml": "datastore_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/iam" + }, + { + "apiPath": "google/iam/admin/v1", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "documentation-uri": "https://cloud.google.com/iam/docs/", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam_admin", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/iam/v1" + }, + { + "api-description": "IAM Logging Protos", + "apiPath": "google/iam/v1/logging", + "documentation-name": "iamlogging", + "documentation-uri": "https://cloud.google.com/iam/docs/audit-logging", + "gapic-version": "1.4.3", + "id": "google-cloud-iam-logging", + "python-gapic-name": "iam_logging", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "IAM Logging Protos", + "transport": "grpc", + "warehouse-package-name": "google-cloud-iam-logging" + }, + { + "apiPath": "google/iam/v2beta", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "documentation-uri": "https://cloud.google.com/iam/docs/", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam_v2beta.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/iam/v3", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam_v3.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/iam/v1beta", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam_v1beta.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/iam/v2", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "documentation-uri": "https://cloud.google.com/iam/docs/", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/iam/v3beta", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iam_grpc_service_config.json", + "service-yaml": "iam_v3beta.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/iam/credentials" + }, + { + "apiPath": "google/iam/credentials/v1", + "default-proto-package": "google.iam.v2", + "documentation-name": "iam", + "documentation-uri": "https://cloud.google.com/iam/docs/", + "gapic-version": "2.19.1", + "id": "google-cloud-iam", + "python-gapic-name": "iam_credentials", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "iam_v3+iam_v3beta+iam_admin_v1+iam_credentials_v1+iam_v2beta", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "iamcredentials_grpc_service_config.json", + "service-yaml": "iamcredentials_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-iam" + }, + { + "apiPath": "google/container" + }, + { + "apiPath": "google/container/v1alpha1" + }, + { + "apiPath": "google/container/v1beta1", + "default-proto-package": "google.container.v1", + "documentation-name": "container", + "documentation-uri": "https://cloud.google.com/kubernetes-engine/", + "gapic-version": "2.57.0", + "id": "google-cloud-container", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "container_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "container_grpc_service_config.json", + "service-yaml": "container_v1beta1.yaml", + "transport": "grpc", + "warehouse-package-name": "google-cloud-container" + }, + { + "apiPath": "google/container/v1", + "default-proto-package": "google.container.v1", + "documentation-name": "container", + "documentation-uri": "https://cloud.google.com/kubernetes-engine/", + "gapic-version": "2.57.0", + "id": "google-cloud-container", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "container_v1beta1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "container_grpc_service_config.json", + "service-yaml": "container_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-container" + }, + { + "apiPath": "google/firestore" + }, + { + "apiPath": "google/firestore/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "firestore_grpc_service_config.json", + "service-yaml": "firestore_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/firestore/admin" + }, + { + "apiPath": "google/firestore/admin/v1", + "python-gapic-name": "firestore_admin", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "firestore_admin_grpc_service_config.json", + "service-yaml": "firestore_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/firestore/v1", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "firestore_grpc_service_config.json", + "service-yaml": "firestore_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/firestore/bundle", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "False", + "transport": "grpc" + }, + { + "apiPath": "google/marketingplatform/admin" + }, + { + "apiPath": "google/marketingplatform/admin/v1alpha", + "documentation-name": "google-ads-marketingplatform-admin", + "gapic-version": "0.1.6", + "id": "google-ads-marketingplatform-admin", + "python-gapic-name": "marketingplatform_admin", + "python-gapic-namespace": "google.ads", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "marketingplatform_admin_v1alpha_grpc_service_config.json", + "service-yaml": "marketingplatformadmin_v1alpha.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-ads-marketingplatform-admin" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/gmail", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/docs", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/drive", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/sheets", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/calendar", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "api-description": "", + "apiPath": "google/apps/script/type/slides", + "default-proto-package": "google.apps.script.type.slides", + "documentation-name": "type", + "documentation-uri": "https://developers.google.com/apps-script/", + "gapic-version": "0.3.15", + "id": "google-apps-script-type", + "reference-doc-includes": "type+type_gmail+type_docs+type_drive+type_sheets+type_calendar", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Script Type Protos", + "transport": "grpc" + }, + { + "apiPath": "google/apps/meet" + }, + { + "apiPath": "google/apps/meet/v2beta", + "default-proto-package": "google.apps.meet.v2", + "documentation-name": "google-apps-meet", + "gapic-version": "0.1.16", + "id": "google-apps-meet", + "reference-doc-includes": "meet_v2beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "meet_v2beta_grpc_service_config.json", + "service-yaml": "meet_v2beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/meet/v2", + "default-proto-package": "google.apps.meet.v2", + "documentation-name": "google-apps-meet", + "gapic-version": "0.1.16", + "id": "google-apps-meet", + "reference-doc-includes": "meet_v2beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "meet_v2_grpc_service_config.json", + "service-yaml": "meet_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/events/subscriptions" + }, + { + "apiPath": "google/apps/events/subscriptions/v1", + "default-proto-package": "google.apps.events.subscriptions.v1", + "documentation-name": "google-apps-events-subscriptions", + "gapic-version": "0.2.2", + "id": "google-apps-events-subscriptions", + "python-gapic-name": "events_subscriptions", + "python-gapic-namespace": "google.apps", + "reference-doc-includes": "subscriptions_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "subscriptions_v1_grpc_service_config.json", + "service-yaml": "workspaceevents_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/events/subscriptions/v1beta", + "default-proto-package": "google.apps.events.subscriptions.v1", + "documentation-name": "google-apps-events-subscriptions", + "gapic-version": "0.2.2", + "id": "google-apps-events-subscriptions", + "python-gapic-name": "events_subscriptions", + "python-gapic-namespace": "google.apps", + "reference-doc-includes": "subscriptions_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "subscriptions_v1beta_grpc_service_config.json", + "service-yaml": "workspaceevents_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "api-description": "Google Apps Card Protos", + "apiPath": "google/apps/card/v1", + "documentation-name": "google-apps-card", + "documentation-uri": "https://developers.google.com/chat", + "gapic-version": "0.1.8", + "id": "google-apps-card", + "release-level": "preview", + "rest-numeric-enums": "False", + "title": "Google Apps Card Protos", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/drive/activity/v2", + "rest-numeric-enums": "True", + "retry-config": "driveactivity_grpc_service_config.json", + "service-yaml": "driveactivity_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/drive/labels/v2beta", + "rest-numeric-enums": "True", + "retry-config": "drivelabels_v2beta_grpc_service_config.json", + "service-yaml": "drivelabels_v2beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/drive/labels/v2", + "rest-numeric-enums": "True", + "retry-config": "drivelabels_v2_grpc_service_config.json", + "service-yaml": "drivelabels_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/apps/alertcenter/v1beta1", + "rest-numeric-enums": "True", + "retry-config": "alertcenter_grpc_service_config.json", + "service-yaml": "alertcenter_v1beta1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/bigtable" + }, + { + "apiPath": "google/bigtable/admin" + }, + { + "apiPath": "google/bigtable/admin/v2", + "autogen-snippets": "False", + "python-gapic-name": "bigtable_admin", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "bigtableadmin_grpc_service_config.json", + "service-yaml": "bigtableadmin_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/bigtable/v2", + "autogen-snippets": "False", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "bigtable_grpc_service_config.json", + "service-yaml": "bigtable_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/devtools/cloudbuild" + }, + { + "apiPath": "google/devtools/cloudbuild/v1", + "default-proto-package": "google.devtools.cloudbuild.v1", + "documentation-name": "cloudbuild", + "documentation-uri": "https://cloud.google.com/cloud-build/docs/", + "gapic-version": "3.31.2", + "id": "google-cloud-build", + "python-gapic-namespace": "google.cloud.devtools", + "reference-doc-includes": "cloudbuild_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudbuild_grpc_service_config.json", + "service-yaml": "cloudbuild_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-build" + }, + { + "apiPath": "google/devtools/cloudbuild/v2", + "default-proto-package": "google.devtools.cloudbuild.v1", + "documentation-name": "cloudbuild", + "documentation-uri": "https://cloud.google.com/cloud-build/docs/", + "gapic-version": "3.31.2", + "id": "google-cloud-build", + "python-gapic-namespace": "google.cloud.devtools", + "reference-doc-includes": "cloudbuild_v2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudbuild_grpc_service_config.json", + "service-yaml": "cloudbuild_v2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-build" + }, + { + "apiPath": "google/devtools/cloudtrace" + }, + { + "apiPath": "google/devtools/cloudtrace/v1", + "default-proto-package": "google.cloud.trace.v2", + "documentation-name": "cloudtrace", + "documentation-uri": "https://cloud.google.com/trace/docs", + "gapic-version": "1.16.2", + "id": "google-cloud-trace", + "python-gapic-name": "trace", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "google_devtools_cloudtrace_v2+google_devtools_cloudtrace_v1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudtrace_grpc_service_config.json", + "service-yaml": "cloudtrace_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/devtools/cloudtrace/v2", + "default-proto-package": "google.cloud.trace.v2", + "documentation-name": "cloudtrace", + "documentation-uri": "https://cloud.google.com/trace/docs", + "gapic-version": "1.16.2", + "id": "google-cloud-trace", + "python-gapic-name": "trace", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "google_devtools_cloudtrace_v2+google_devtools_cloudtrace_v1", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "cloudtrace_grpc_service_config.json", + "service-yaml": "cloudtrace_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/devtools/containeranalysis" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/vulnerability" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/attestation" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/deployment" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/common" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/build" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/provenance" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/discovery" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/image" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/package" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/grafeas" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/cvss" + }, + { + "apiPath": "google/devtools/containeranalysis/v1beta1/source" + }, + { + "apiPath": "google/devtools/containeranalysis/v1", + "documentation-name": "containeranalysis", + "documentation-uri": "https://cloud.google.com/container-registry/docs/container-analysis", + "gapic-version": "2.18.1", + "id": "google-cloud-containeranalysis", + "python-gapic-namespace": "google.cloud.devtools", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "containeranalysis_grpc_service_config.json", + "service-yaml": "containeranalysis_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-containeranalysis" + }, + { + "apiPath": "google/devtools/clouderrorreporting" + }, + { + "apiPath": "google/devtools/clouderrorreporting/v1beta1", + "python-gapic-name": "errorreporting", + "python-gapic-namespace": "google.cloud", + "rest-numeric-enums": "True", + "retry-config": "errorreporting_grpc_service_config.json", + "service-yaml": "clouderrorreporting_v1beta1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-error-reporting" + }, + { + "apiPath": "google/devtools/build" + }, + { + "apiPath": "google/devtools/build/v1", + "rest-numeric-enums": "False", + "retry-config": "buildeventservice_grpc_service_config.json", + "service-yaml": "buildeventservice_v1.yaml", + "transport": "grpc" + }, + { + "apiPath": "google/devtools/artifactregistry" + }, + { + "apiPath": "google/devtools/artifactregistry/v1beta2", + "default-proto-package": "google.devtools.artifactregistry.v1", + "documentation-name": "artifactregistry", + "documentation-uri": "https://cloud.google.com/artifact-registry", + "gapic-version": "1.16.1", + "id": "google-cloud-artifact-registry", + "python-gapic-name": "artifactregistry", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "artifactregistry_v1beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "artifactregistry_grpc_service_config.json", + "service-yaml": "artifactregistry_v1beta2.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-artifact-registry" + }, + { + "apiPath": "google/devtools/artifactregistry/v1", + "default-proto-package": "google.devtools.artifactregistry.v1", + "documentation-name": "artifactregistry", + "documentation-uri": "https://cloud.google.com/artifact-registry", + "gapic-version": "1.16.1", + "id": "google-cloud-artifact-registry", + "python-gapic-name": "artifactregistry", + "python-gapic-namespace": "google.cloud", + "reference-doc-includes": "artifactregistry_v1beta2", + "release-level": "stable", + "rest-numeric-enums": "True", + "retry-config": "artifactregistry_grpc_service_config.json", + "service-yaml": "artifactregistry_v1.yaml", + "transport": "grpc+rest", + "warehouse-package-name": "google-cloud-artifact-registry" + }, + { + "apiPath": "google/devtools/testing/v1", + "rest-numeric-enums": "True", + "retry-config": "testing_grpc_service_config.json", + "service-yaml": "testing_v1.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/devtools/cloudprofiler" + }, + { + "apiPath": "google/devtools/cloudprofiler/v2", + "rest-numeric-enums": "True", + "retry-config": "cloudprofiler_grpc_service_config.json", + "service-yaml": "cloudprofiler_v2.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/devtools/remoteworkers/v1test2", + "rest-numeric-enums": "False", + "retry-config": "remoteworkers_grpc_service_config.json", + "service-yaml": "remoteworkers_v1test2.yaml", + "transport": "grpc" + }, + { + "api-description": "Source Context", + "apiPath": "google/devtools/source/v1", + "documentation-name": "source", + "documentation-uri": "https://cloud.google.com", + "gapic-version": "1.7.1", + "id": "google-cloud-source-context", + "python-gapic-name": "source_context", + "python-gapic-namespace": "google.cloud", + "release-level": "stable", + "rest-numeric-enums": "False", + "title": "Source Context", + "transport": "grpc", + "warehouse-package-name": "google-cloud-source-context" + }, + { + "apiPath": "google/devtools/resultstore/v2" + }, + { + "apiPath": "google/analytics/admin" + }, + { + "apiPath": "google/analytics/admin/v1alpha", + "autogen-snippets": "False", + "default-proto-package": "google.analytics.admin.v1alpha", + "documentation-name": "analyticsadmin", + "documentation-uri": "https://developers.google.com/analytics/", + "gapic-version": "0.24.1", + "id": "google-analytics-admin", + "reference-doc-includes": "admin_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "admin_grpc_service_config.json", + "service-yaml": "analyticsadmin_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/analytics/admin/v1beta", + "default-proto-package": "google.analytics.admin.v1alpha", + "documentation-name": "analyticsadmin", + "documentation-uri": "https://developers.google.com/analytics/", + "gapic-version": "0.24.1", + "id": "google-analytics-admin", + "reference-doc-includes": "admin_v1beta", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "admin_grpc_service_config.json", + "service-yaml": "analyticsadmin_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/analytics/cloud", + "rest-numeric-enums": "False", + "transport": "grpc+rest" + }, + { + "apiPath": "google/analytics/data" + }, + { + "apiPath": "google/analytics/data/v1alpha", + "default-proto-package": "google.analytics.data.v1beta", + "documentation-name": "analyticsdata", + "documentation-uri": "https://developers.google.com/analytics/", + "gapic-version": "0.18.19", + "id": "google-analytics-data", + "reference-doc-includes": "data_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "analytics_data_grpc_service_config.json", + "service-yaml": "analyticsdata_v1alpha.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/analytics/data/v1beta", + "default-proto-package": "google.analytics.data.v1beta", + "documentation-name": "analyticsdata", + "documentation-uri": "https://developers.google.com/analytics/", + "gapic-version": "0.18.19", + "id": "google-analytics-data", + "reference-doc-includes": "data_v1alpha", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "analytics_data_grpc_service_config.json", + "service-yaml": "analyticsdata_v1beta.yaml", + "transport": "grpc+rest" + }, + { + "apiPath": "google/area120/tables" + }, + { + "api-description": "provides programmatic methods to the Area 120 Tables API.", + "apiPath": "google/area120/tables/v1alpha1", + "documentation-name": "area120tables", + "documentation-uri": "https://area120.google.com", + "gapic-version": "0.11.17", + "id": "google-area120-tables", + "release-level": "preview", + "rest-numeric-enums": "True", + "retry-config": "tables_grpc_service_config.json", + "service-yaml": "area120tables_v1alpha1.yaml", + "transport": "grpc+rest" + } + ] +} diff --git a/generator-input/client-post-processing/add-dependency-google-cloud-common.yaml b/generator-input/client-post-processing/add-dependency-google-cloud-common.yaml new file mode 100644 index 000000000000..8b4a4fcdaf25 --- /dev/null +++ b/generator-input/client-post-processing/add-dependency-google-cloud-common.yaml @@ -0,0 +1,48 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Add missing dependency for google-cloud-common +url: https://github.com/googleapis/gapic-generator-python/issues/1836 +replacements: + - paths: [ + packages/google-cloud-filestore/setup.py, + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "google-cloud-common >= 1.0.0, <2.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-filestore/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + google-cloud-common==1.0.0 + proto-plus==1.22.3 + count: 1 diff --git a/generator-input/client-post-processing/add-missing-dependencies-to-setup-py-constraints.yaml b/generator-input/client-post-processing/add-missing-dependencies-to-setup-py-constraints.yaml new file mode 100644 index 000000000000..0b10ea7f1e87 --- /dev/null +++ b/generator-input/client-post-processing/add-missing-dependencies-to-setup-py-constraints.yaml @@ -0,0 +1,144 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: setup.py and testing/constraints-3.7.txt are missing necessary dependencies +url: https://github.com/googleapis/gapic-generator-python/issues/1831 +replacements: + - paths: [ + packages/google-cloud-gke-hub/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "grpc-google-iam-v1 >=0.12.4, <1.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-gke-hub/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + grpc-google-iam-v1==0.12.4 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-build/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "grpc-google-iam-v1 >=0.12.4, <1.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-build/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + grpc-google-iam-v1==0.12.4 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-binary-authorization/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "grafeas >= 1.1.2, <2.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-binary-authorization/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + grafeas==1.1.2 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-iam/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + grpc-google-iam-v1==0.12.4 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-iam/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "grpc-google-iam-v1 >=0.12.4, <1.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 diff --git a/generator-input/client-post-processing/containeranalysis-grafeas-integration.yaml b/generator-input/client-post-processing/containeranalysis-grafeas-integration.yaml new file mode 100644 index 000000000000..92470bc21e3d --- /dev/null +++ b/generator-input/client-post-processing/containeranalysis-grafeas-integration.yaml @@ -0,0 +1,168 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Customizations related to the integration with grafeas +url: https://github.com/googleapis/gapic-generator-python/issues/1830 +replacements: + - paths: [ + packages/google-cloud-containeranalysis/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "grafeas >=1.4.1, <2.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + grafeas==1.4.1 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/services/container_analysis/client.py, + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/services/container_analysis/async_client.py, + ] + before: | + from google.iam.v1 import policy_pb2 # type: ignore\n + after: | + from google.iam.v1 import policy_pb2 # type: ignore + from grafeas import grafeas_v1 + from grafeas.grafeas_v1.services.grafeas import transports\n + count: 2 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/services/container_analysis/client.py, + ] + before: | + \,\n "credentialsType": None, + \ \}, + \ \) + \ + \ def set_iam_policy\( + after: | + ,\n "credentialsType": None, + }, + )\n + def get_grafeas_client(self) -> grafeas_v1.GrafeasClient: + grafeas_transport = grafeas_v1.services.grafeas.transports.GrafeasGrpcTransport( + credentials=self.transport._credentials, + # Set ``credentials_file`` to ``None`` here as + # transport._credentials contains the credentials + # which are saved + credentials_file=None, + host=self.transport._host, + scopes=self.transport.AUTH_SCOPES, + ) + return grafeas_v1.GrafeasClient(transport=grafeas_transport)\n + def set_iam_policy( + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/services/container_analysis/async_client.py, + ] + before: | + \,\n "credentialsType": None, + \ \}, + \ \) + \ + \ async def set_iam_policy\( + after: | + ,\n "credentialsType": None, + }, + )\n + def get_grafeas_client(self) -> grafeas_v1.GrafeasClient: + grafeas_transport = grafeas_v1.services.grafeas.transports.GrafeasGrpcTransport( + credentials=self.transport._credentials, + # Set ``credentials_file`` to ``None`` here as + # transport._credentials contains the credentials + # which are saved + credentials_file=None, + host=self.transport._host, + scopes=self.transport.AUTH_SCOPES, + ) + return grafeas_v1.GrafeasClient(transport=grafeas_transport)\n + async def set_iam_policy( + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/types/containeranalysis.py + ] + before: from grafeas.v1 import severity_pb2 # type: ignore + after: import grafeas.grafeas_v1 # type: ignore + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/tests/unit/gapic/containeranalysis_v1/test_container_analysis.py + ] + before: | + \) + \ create_channel.assert_called_with\( + \ "containeranalysis.googleapis.com:443", + \ credentials=file_creds, + \ credentials_file=None, + \ quota_project_id=None, + \ default_scopes=\("https://www.googleapis.com/auth/cloud-platform",\), + \ scopes=None, + \ default_host="containeranalysis.googleapis.com", + \ ssl_credentials=None, + \ options=\[ + \ \("grpc.max_send_message_length", -1\), + \ \("grpc.max_receive_message_length", -1\), + \ \], + \ \)\n\n + after: | + ) + create_channel.assert_called_with( + "containeranalysis.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="containeranalysis.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Also check client.get_grafeas_client() to make sure that the file credentials are used + assert file_creds == client.get_grafeas_client().transport._credentials\n\n + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/types/containeranalysis.py + ] + before: grafeas.v1.severity_pb2.Severity + after: grafeas.v1.grafeas.grafeas_v1.Severity + count: 1 + - paths: [ + packages/google-cloud-containeranalysis/google/cloud/devtools/containeranalysis_v1/types/containeranalysis.py + ] + before: severity_pb2 + after: grafeas.grafeas_v1 + count: 2 diff --git a/generator-input/client-post-processing/doc-formatting.yaml b/generator-input/client-post-processing/doc-formatting.yaml new file mode 100644 index 000000000000..d9e26041f828 --- /dev/null +++ b/generator-input/client-post-processing/doc-formatting.yaml @@ -0,0 +1,451 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Fix formatting issues in docs +url: https://github.com/googleapis/gapic-generator-python/issues/1829 +replacements: + - paths: [ + packages/google-cloud-compute/google/cloud/compute_v1/types/compute.py, + ] + before: \"IT_\" + after: "`IT_`" + count: 2 + - paths: [ + packages/google-cloud-compute/google/cloud/compute_v1/types/compute.py, + ] + before: \"NS_\" + after: "`NS_`" + count: 2 + - paths: [ + packages/google-ai-generativelanguage/google/ai/generativelanguage_v1beta3/services/permission_service/async_client.py, + packages/google-ai-generativelanguage/google/ai/generativelanguage_v1beta3/services/permission_service/client.py + ] + before: | + \ role's permitted operations: + \ + \ - reader can use the resource \(e.g. + \ tuned model\) for inference + \ - writer has reader's permissions and + \ additionally can edit and share + \ - owner has writer's permissions and + \ additionally can delete + after: " role's permitted operations:\n\n - reader can use the resource (e.g.\n tuned model) for inference\n - writer has reader's permissions and\n additionally can edit and share\n - owner has writer's permissions and\n additionally can delete\n" + count: 6 + - paths: [ + packages/google-ai-generativelanguage/google/ai/generativelanguage_v1beta3/types/permission.py, + ] + before: | + \ previous role's permitted operations: + \ + \ - reader can use the resource \(e.g. tuned model\) for inference + \ - writer has reader's permissions and additionally can edit and + \ share + \ - owner has writer's permissions and additionally can delete + after: " previous role's permitted operations:\n\n - reader can use the resource (e.g. tuned model) for inference\n - writer has reader's permissions and additionally can edit and\n share\n - owner has writer's permissions and additionally can delete\n" + count: 1 + - paths: [ + packages/google-cloud-datacatalog/google/cloud/datacatalog_v1beta1/types/usage.py, + ] + before: | + \ references are not yet counted in usage computation + \ https://cloud.google.com/bigquery/docs/querying-wildcard-tables + after: " references are not yet counted in usage computation\n https://cloud.google.com/bigquery/docs/querying-wildcard-tables\n" + count: 1 + - paths: [ + packages/google-cloud-edgenetwork/google/cloud/edgenetwork_v1/types/resources.py, + ] + before: | + \ 14 years, 51 weeks, 6 days, 23 hours, 59 + after: " 14 years, 51 weeks, 6 days, 23 hours, 59\n" + count: 1 + - paths: [ + packages/google-cloud-network-connectivity/google/cloud/networkconnectivity_v1/types/policy_based_routing.py, + ] + before: | + \ 1000. The priority value must be from 1 to + \ 65535, inclusive. + after: " 1000. The priority value must be from 1 to\n 65535, inclusive.\n" + count: 1 + - paths: [ + packages/google-cloud-visionai/google/cloud/visionai_v1/types/platform.py, + packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/types/platform.py, + ] + before: | + \ 'ingestionTime': DOUBLE; \(UNIX timestamp\) + \ 'application': STRING; + after: " 'ingestionTime': DOUBLE; (UNIX timestamp)\n 'application': STRING;\n" + count: 2 + - paths: [ + packages/google-cloud-visionai/google/cloud/visionai_v1/types/platform.py, + packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/types/platform.py, + ] + before: "'processor': STRING;\n }\n" + after: "'processor': STRING;\n\n }\n\n" + count: 2 + - paths: [ + packages/google-cloud-documentai/google/cloud/documentai_v1beta3/types/document_service.py, + ] + before: | + \n Currently support query strings are: + \ ------------------------------------ + \ + \ ``SplitType=DATASET_SPLIT_TEST\|DATASET_SPLIT_TRAIN\|DATASET_SPLIT_UNASSIGNED`` + \ + \ - ``LabelingState=DOCUMENT_LABELED\|DOCUMENT_UNLABELED\|DOCUMENT_AUTO_LABELED`` + after: "\n Currently support query strings are:\n\n - ``SplitType=DATASET_SPLIT_TEST|DATASET_SPLIT_TRAIN|DATASET_SPLIT_UNASSIGNED``\n - ``LabelingState=DOCUMENT_LABELED|DOCUMENT_UNLABELED|DOCUMENT_AUTO_LABELED``\n" + count: 1 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/async_client.py, + ] + before: \|Message sent with app authentication\| + after: "|Message sent with app authentication async|" + count: 2 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/transports/grpc_asyncio.py, + ] + before: \|Message sent with app authentication\| + after: "|Message sent with app authentication async gRPC|" + count: 2 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/transports/grpc.py, + ] + before: \|Message sent with app authentication\| + after: "|Message sent with app authentication gRPC|" + count: 2 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/async_client.py, + ] + before: \|Message sent with user authentication\| + after: "|Message sent with user authentication async|" + count: 2 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/transports/grpc_asyncio.py, + ] + before: \|Message sent with user authentication\| + after: "|Message sent with user authentication async gRPC|" + count: 2 + - paths: [ + packages/google-apps-chat/google/apps/chat_v1/services/chat_service/transports/grpc.py, + ] + before: \|Message sent with user authentication\| + after: "|Message sent with user authentication gRPC|" + count: 2 + - paths: [ + packages/google-cloud-alloydb/google/cloud/alloydb_v1/types/resources.py, + packages/google-cloud-alloydb/google/cloud/alloydb_v1alpha/types/resources.py, + packages/google-cloud-alloydb/google/cloud/alloydb_v1beta/types/resources.py, + ] + before: | + \ 1024. Any integer between 256 and 4500 is + \ considered valid. + after: " 1024. Any integer between 256 and 4500 is\n considered valid.\n" + count: 3 + - paths: [ + packages/google-cloud-dms/google/cloud/clouddms_v1/types/conversionworkspace_resources.py, + ] + before: | + Optional. Column fractional seconds precision + \ - used only for timestamp based datatypes - if + \ not specified and relevant uses the source + after: | + Optional. Column fractional seconds precision: + + - used only for timestamp based datatypes + - if not specified and relevant uses the source + count: 1 + - paths: [ + packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph_v1/types/service.py, + ] + before: | + If true, separate clusters by their + \ geographic region \(from geocoding\). Uses the + \ following entity features:\n + \ - schema.org/addressLocality + \ - schema.org/addressRegion + \ - schema.org/addressCountry + \ Warning: processing will no longer be + \ regionalized! + after: | + If true, separate clusters by their + geographic region (from geocoding). Uses the + following entity features:\n + - schema.org/addressLocality + - schema.org/addressRegion + - schema.org/addressCountry\n + Warning: processing will no longer be + regionalized! + count: 1 + - paths: [ + packages/google-cloud-gdchardwaremanagement/google/cloud/gdchardwaremanagement_v1alpha/types/resources.py, + ] + before: | + Optional. Any additional notes for this Site. + \ Please include information about:\n + \ - security or access restrictions + \ - any regulations affecting the technicians + \ visiting the site + \ - any special process or approval required to + \ move the equipment + \ - whether a representative will be available + \ during site visits + after: | + Optional. Any additional notes for this Site. + Please include information about:\n + - security or access restrictions + - any regulations affecting the technicians + visiting the site + - any special process or approval required to + move the equipment + - whether a representative will be available + during site visits\n + count: 1 + - paths: [ + packages/google-cloud-network-management/google/cloud/network_management_v1/types/connectivity_test.py, + ] + before: | + \ projects\/\{project\}\/global\/forwardingRules\/\{id\} + after: " projects/{project}/global/forwardingRules/{id}\n" + count: 1 + - paths: [ + packages/google-cloud-oracledatabase/google/cloud/oracledatabase_v1/types/exadata_infra.py, + ] + before: | + Optional. The window of hours during the day + \ when maintenance should be performed. The window + \ is a 4 hour slot. Valid values are:\n + \ 0 - represents time slot 0:00 - 3:59 UTC + \ 4 - represents time slot 4:00 - 7:59 UTC + \ 8 - represents time slot 8:00 - 11:59 UTC + \ 12 - represents time slot 12:00 - 15:59 UTC + \ 16 - represents time slot 16:00 - 19:59 UTC 20 + \ - represents time slot 20:00 - 23:59 UTC + after: | + Optional. The window of hours during the day + when maintenance should be performed. The window + is a 4 hour slot. Valid values are:\n + 0 - represents time slot 0:00 - 3:59 UTC + 4 - represents time slot 4:00 - 7:59 UTC + 8 - represents time slot 8:00 - 11:59 UTC + 12 - represents time slot 12:00 - 15:59 UTC + 16 - represents time slot 16:00 - 19:59 UTC + 20 - represents time slot 20:00 - 23:59 UTC + count: 1 + - paths: [ + packages/google-cloud-service-control/google/cloud/servicecontrol_v1/types/service_controller.py, + ] + before: | + The Google cloud project number, e.g. + \ 1234567890. A value of 0 indicates no project + \ number is found. + after: | + The Google cloud project number, e.g. + 1234567890. A value of 0 indicates no project + number is found. + count: 1 + - paths: [ + packages/google-maps-routing/google/maps/routing_v2/types/toll_passes.py, + ] + before: | + E-card provided by multiple banks used to pay + \ for tolls. All e-cards via banks are charged the + \ same so only one enum value is needed. E.g. + \ - Bank Mandiri + after: | + E-card provided by multiple banks used to pay + for tolls. All e-cards via banks are charged the + same so only one enum value is needed. E.g.\n + - Bank Mandiri + count: 1 + - paths: [ + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/online_return_policy_service/async_client.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/online_return_policy_service/client.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/online_return_policy_service/transports/grpc.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/online_return_policy_service/transports/grpc_asyncio.py, + ] + before: "This API defines the following resource model:\n --------------------------------------------------------\n\n `OnlineReturnPolicy" + after: "This API defines the following resource model:\n\n - `OnlineReturnPolicy" + count: 4 + - paths: [ + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/omnichannel_settings_service/async_client.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/omnichannel_settings_service/client.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/omnichannel_settings_service/transports/grpc.py, + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/services/omnichannel_settings_service/transports/grpc_asyncio.py, + ] + before: | + This API defines the following resource model: + \ ----------------------------------------------\n + \ \[OmnichannelSetting\]\[google.shopping.merchant.accounts.v1.OmnichannelSetting\] + after: | + This API defines the following resource model: + - [OmnichannelSetting][google.shopping.merchant.accounts.v1.OmnichannelSetting] + count: 4 + - paths: [ + packages/google-shopping-merchant-accounts/google/shopping/merchant_accounts_v1beta/types/shippingsettings.py + ] + before: | + Required. This field is used for avoid async + \ issue. Make sure shipping setting data + \ didn't change between get call and insert call. + after: | + Required. This field is used for avoid async + issue. Make sure shipping setting data + didn't change between get call and insert call. + count: 1 + - paths: [ + packages/google-cloud-monitoring/google/cloud/monitoring_v3/types/metric_service.py + ] + before: | + Optional. If true, only metrics and monitored + \ resource types that have recent data \(within + \ roughly 25 hours\) will be included in the + \ response. + \ - If a metric descriptor enumerates monitored + \ resource types, only the monitored resource + \ types for which the metric type has recent + \ data will be included in the returned + \ metric descriptor, and if none of them have + \ recent data, the metric descriptor will not be + \ returned. + \ - If a metric descriptor does not enumerate the + \ compatible monitored resource types, it + \ will be returned only if the metric type has + \ recent data for some monitored resource + \ type. The returned descriptor will not + \ enumerate any monitored resource types. + after: | + Optional. If true, only metrics and monitored + resource types that have recent data (within + roughly 25 hours) will be included in the + response.\n + - If a metric descriptor enumerates monitored + resource types, only the monitored resource + types for which the metric type has recent + data will be included in the returned + metric descriptor, and if none of them have + recent data, the metric descriptor will not be + returned. + - If a metric descriptor does not enumerate the + compatible monitored resource types, it + will be returned only if the metric type has + recent data for some monitored resource + type. The returned descriptor will not + enumerate any monitored resource types. + count: 1 + - paths: [ + packages/google-cloud-orchestration-airflow/google/cloud/orchestration/airflow/service_v1/types/environments.py, + packages/google-cloud-orchestration-airflow/google/cloud/orchestration/airflow/service_v1beta1/types/environments.py, + ] + before: | + \{ + "example": "ZXhhbXBsZV92YWx1ZQ==", + "another-example": + "YW5vdGhlcl9leGFtcGxlX3ZhbHVl" \} + after: | + .. code-block:: json\n + { + "example": "ZXhhbXBsZV92YWx1ZQ==", + "another-example": "YW5vdGhlcl9leGFtcGxlX3ZhbHVl" + }\n + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: "Classification\n ''''''''''''''" + after: "Classification:" + count: 6 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: | + AutoML Vision + \ \^\^\^\^\^\^\^\^\^\^\^\^\^ + after: | + AutoML Vision: + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: | + AutoML Tables + \ \^\^\^\^\^\^\^\^\^\^\^\^\^ + after: | + AutoML Tables: + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: | + AutoML Tables + \ \^\^\^\^\^\^\^\^\^\^\^\^\^ + after: | + AutoML Tables: + count: 1 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: "Entity Extraction\n '''''''''''''''''" + after: "Entity Extraction:" + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: "Sentiment Analysis\n ''''''''''''''''''" + after: "Sentiment Analysis:" + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: "Object Tracking\n '''''''''''''''" + after: "Object Tracking:" + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: | + AutoML Video Intelligence + \ \^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^ + after: | + AutoML Video Intelligence: + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: "Object Detection\n ''''''''''''''''" + after: "Object Detection:" + count: 2 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1/types/io.py, + ] + before: | + AutoML Natural Language + \ \^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^ + after: | + AutoML Natural Language: + count: 2 + - paths: [ + packages/google-cloud-workflows/google/cloud/workflows_v1/types/workflows.py, + ] + before: | + The maximum number of revisions to return per + \ page. If a value is not specified, a default + \ value of 20 is used. The maximum permitted value + \ is + \ 100. Values greater than 100 are coerced down to + \ 100. + after: | + The maximum number of revisions to return per + page. If a value is not specified, a default + value of 20 is used. The maximum permitted value + is 100. Values greater than 100 are coerced down + to 100. + count: 1 diff --git a/generator-input/client-post-processing/docs-index-rst-for-unversioned-apis.yaml b/generator-input/client-post-processing/docs-index-rst-for-unversioned-apis.yaml new file mode 100644 index 000000000000..266307713a7d --- /dev/null +++ b/generator-input/client-post-processing/docs-index-rst-for-unversioned-apis.yaml @@ -0,0 +1,174 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: docs/index.rst is handwritten for unversioned APIs +url: https://github.com/googleapis/gapic-generator-python/issues/1837 +replacements: + - paths: [ + packages/google-cloud-common/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + common/services_ + common/types_ + after: | + .. include:: README.rst + + .. include:: multiprocessing.rst + + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + + common/services_ + common/types_ + + Changelog + --------- + + For a list of all ``google-cloud-common`` releases: + + .. toctree:: + :maxdepth: 2 + + CHANGELOG + + .. toctree:: + :hidden: + + summary_overview.md + count: 1 + - paths: [ + packages/google-shopping-type/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + type/services_ + type/types_ + after: | + .. include:: README.rst + + .. include:: multiprocessing.rst + + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + + type/services_ + type/types_ + + Changelog + --------- + + For a list of all ``google-shopping-type`` releases: + + .. toctree:: + :maxdepth: 2 + + CHANGELOG + count: 1 + - paths: [ + packages/google-apps-script-type/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + type/services_ + type/types_ + after: | + .. include:: README.rst + + .. include:: multiprocessing.rst + + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + + calendar/services_ + calendar/types_ + docs/services_ + docs/types_ + drive/services_ + drive/types_ + gmail/services_ + gmail/types_ + sheets/services_ + sheets/types_ + slides/services_ + slides/types_ + type/services_ + type/types_ + + + Changelog + --------- + + For a list of all ``google-apps-script-type`` releases: + + .. toctree:: + :maxdepth: 2 + + CHANGELOG + count: 1 + - paths: [ + packages/google-geo-type/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + type/services_ + type/types_ + after: | + .. include:: README.rst + + .. include:: multiprocessing.rst + + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + + type/services_ + type/types_ + + Changelog + --------- + + For a list of all ``google-geo-type`` releases: + + .. toctree:: + :maxdepth: 2 + + CHANGELOG + count: 1 diff --git a/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml b/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml new file mode 100644 index 000000000000..1d5d43ca7a2f --- /dev/null +++ b/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml @@ -0,0 +1,271 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Integrate isolated handwritten helpers/mixin code +url: https://github.com/googleapis/gapic-generator-python/issues/1642 +replacements: + - paths: [ + packages/google-cloud-vision/google/cloud/vision/__init__.py + ] + before: | + from google.cloud.vision_v1.services.image_annotator.client import ImageAnnotatorClient + after: | + from google.cloud.vision_v1 import ImageAnnotatorClient + count: 1 + - paths: [ + packages/google-cloud-vision/google/cloud/vision_v1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p1beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p2beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p3beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p4beta1/__init__.py, + ] + before: | + from .services.image_annotator import ImageAnnotatorAsyncClient, ImageAnnotatorClient + after: | + from google.cloud.vision_helpers import VisionHelpers + from google.cloud.vision_helpers.decorators import add_single_feature_methods\n + from .services.image_annotator import ImageAnnotatorAsyncClient + from .services.image_annotator import ImageAnnotatorClient as IacImageAnnotatorClient + count: 5 + - paths: [ + packages/google-cloud-vision/google/cloud/vision_v1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p1beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p2beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p3beta1/__init__.py, + packages/google-cloud-vision/google/cloud/vision_v1p4beta1/__init__.py, + ] + before: | + from .types.web_detection import WebDetection\n + __all__ = \( + after: | + from .types.web_detection import WebDetection\n\n + @add_single_feature_methods + class ImageAnnotatorClient(VisionHelpers, IacImageAnnotatorClient): + __doc__ = IacImageAnnotatorClient.__doc__ + Feature = Feature\n\n + __all__ = ( + count: 5 + - paths: [ + "packages/google-cloud-translate/setup.py" + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "google-cloud-core >= 1.4.4, <3.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + "packages/google-cloud-translate/testing/constraints-3.7.txt" + ] + before: | + proto-plus==1.22.3 + protobuf==3.20.2 + after: | + proto-plus==1.22.3 + google-cloud-core==1.4.4 + protobuf==3.20.2 + count: 1 + - paths: [ + "packages/google-cloud-translate/docs/index.rst", + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + translate_v2/services_ + translate_v2/types_ + after: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + v2 + count: 1 + - paths: [ + packages/google-cloud-speech/google/cloud/speech_v1/__init__.py, + ] + before: | + \) + + __all__ = \( + after: | + ) + + from google.cloud.speech_v1.helpers import SpeechHelpers\n\n + class SpeechClient(SpeechHelpers, SpeechClient): + __doc__ = SpeechClient.__doc__\n\n + __all__ = ( + count: 1 + - paths: [ + packages/google-cloud-speech/google/cloud/speech_v1p1beta1/__init__.py, + ] + before: | + \)\n + __all__ = \( + after: | + )\n + from google.cloud.speech_v1.helpers import SpeechHelpers + \n + class SpeechClient(SpeechHelpers, SpeechClient): + __doc__ = SpeechClient.__doc__\n\n + __all__ = ( + count: 1 + - paths: [ + packages/google-cloud-speech/google/cloud/speech/__init__.py, + ] + before: | + from google.cloud.speech_v1.services.speech.client import SpeechClient + after: | + from google.cloud.speech_v1 import SpeechClient + count: 1 + - paths: [ + packages/google-cloud-monitoring/setup.py, + ] + before: extras = \{\} + after: | + extras = {"pandas": "pandas >= 0.23.2"} + count: 1 + - paths: [ + packages/google-cloud-monitoring/testing/constraints-3.7.txt, + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + pandas==0.23.2 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-monitoring/noxfile.py, + ] + before: | + UNIT_TEST_EXTRAS: List\[str\] = \[\] + after: | + UNIT_TEST_EXTRAS: List[str] = ["pandas"] + count: 1 + - paths: [ + packages/google-cloud-monitoring/docs/index.rst, + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + monitoring_v3/services_ + monitoring_v3/types_ + after: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + query.rst + monitoring_v3/services_ + monitoring_v3/types_ + count: 1 + - paths: [ + packages/google-cloud-automl/setup.py, + ] + before: extras = \{\} + after: | + extras = { + "libcst": "libcst >= 0.2.5", + "pandas": ["pandas>=1.0.5"], + "storage": ["google-cloud-storage >=1.18.0, <4.0.0"], + } + count: 1 + - paths: [ + packages/google-cloud-automl/testing/constraints-3.7.txt, + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + google-cloud-storage==1.18.0 + libcst==0.2.5 + pandas==1.0.5 + proto-plus==1.22.3 + count: 1 + - paths: [ + packages/google-cloud-automl/docs/automl_v1beta1/services_.rst, + ] + before: | + Services for Google Cloud Automl v1beta1 API + ============================================ + .. toctree:: + :maxdepth: 2 + + auto_ml + prediction_service + after: | + Services for Google Cloud Automl v1beta1 API + ============================================ + .. toctree:: + :maxdepth: 2 + + tables + auto_ml + prediction_service + count: 1 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py, + ] + before: | + \) + from .types.annotation_payload import AnnotationPayload + after: | + ) + from .services.tables.gcs_client import GcsClient + from .services.tables.tables_client import TablesClient + from .types.annotation_payload import AnnotationPayload + count: 1 + - paths: [ + packages/google-cloud-automl/google/cloud/automl_v1beta1/__init__.py, + ] + before: | + __all__ = \( + "AutoMlAsyncClient", + after: | + __all__ = ( + "GcsClient", + "TablesClient", + "AutoMlAsyncClient", + count: 1 + - paths: [ + packages/google-cloud-automl/noxfile.py, + ] + before: | + UNIT_TEST_EXTRAS: List\[str\] = \[\] + after: | + UNIT_TEST_EXTRAS: List[str] = ["pandas", "storage"] + count: 1 diff --git a/generator-input/client-post-processing/mypy-error-with-org-policy-as-dependency.yaml b/generator-input/client-post-processing/mypy-error-with-org-policy-as-dependency.yaml new file mode 100644 index 000000000000..72b07040efc2 --- /dev/null +++ b/generator-input/client-post-processing/mypy-error-with-org-policy-as-dependency.yaml @@ -0,0 +1,48 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Mypy error in asset golden files when adding dependency for google-cloud-org-policy +url: https://github.com/googleapis/gapic-generator-python/issues/1806 +replacements: + - paths: [ + packages/google-cloud-asset/setup.py + ] + before: | + dependencies = \[ + "google-api-core\[grpc\] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "proto-plus >= 1.22.3, <2.0.0", + after: | + dependencies = [ + "google-api-core[grpc] >= 1.34.1, <3.0.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + # 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", + "google-cloud-org-policy >= 0.1.2, <2.0.0", + "proto-plus >= 1.22.3, <2.0.0", + count: 1 + - paths: [ + packages/google-cloud-asset/testing/constraints-3.7.txt + ] + before: | + google-api-core==1.34.1 + google-auth==2.14.1 + proto-plus==1.22.3 + after: | + google-api-core==1.34.1 + google-auth==2.14.1 + google-cloud-org-policy==0.1.2 + proto-plus==1.22.3 + count: 1 diff --git a/generator-input/client-post-processing/proto-plus-dependency-with-modified-namespace.yaml b/generator-input/client-post-processing/proto-plus-dependency-with-modified-namespace.yaml new file mode 100644 index 000000000000..78797d2b1b4e --- /dev/null +++ b/generator-input/client-post-processing/proto-plus-dependency-with-modified-namespace.yaml @@ -0,0 +1,74 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Unable to generate client if it has a proto-plus dependency with a modified namespace +url: https://github.com/googleapis/gapic-generator-python/issues/1796 +replacements: + - paths: [ + packages/google-cloud-binary-authorization/google/cloud/binaryauthorization_v1/types/service.py, + ] + before: | + from grafeas.v1 import attestation_pb2 # type: ignore + after: | + import grafeas.grafeas_v1.types # type: ignore + count: 1 + - paths: [ + packages/google-cloud-binary-authorization/google/cloud/binaryauthorization_v1/types/service.py, + ] + before: attestation_pb2 + after: grafeas.grafeas_v1.types + count: 3 + - paths: [ + packages/google-cloud-binary-authorization/google/cloud/binaryauthorization_v1/types/service.py, + ] + before: grafeas.v1.grafeas.grafeas_v1.types.AttestationOccurrence + after: grafeas.grafeas_v1.types.AttestationOccurrence + count: 1 + - paths: [ + packages/google-cloud-policytroubleshooter-iam/google/cloud/policytroubleshooter_iam_v3/types/troubleshooter.py, + ] + before: from google.iam.v2 import policy_pb2 # type: ignore + after: from google.cloud.iam_v2 import Policy # type: ignore + count: 1 + - paths: [ + packages/google-cloud-policytroubleshooter-iam/google/cloud/policytroubleshooter_iam_v3/types/troubleshooter.py, + ] + before: | + deny_access_state: "DenyAccessState" = proto.Field\( + proto.ENUM, + number=1, + enum="DenyAccessState", + \) + policy: policy_pb2.Policy = proto.Field\( + proto.MESSAGE, + number=2, + message=policy_pb2.Policy, + \) + after: | + deny_access_state: "DenyAccessState" = proto.Field( + proto.ENUM, + number=1, + enum="DenyAccessState", + ) + policy: Policy = proto.Field( + proto.MESSAGE, + number=2, + message=Policy, + ) + count: 1 + - paths: [ + packages/google-cloud-policytroubleshooter-iam/google/cloud/policytroubleshooter_iam_v3/types/troubleshooter.py, + ] + before: google.iam.v2.policy_pb2.Policy + after: google.cloud.iam_v2.Policy + count: 1 diff --git a/generator-input/client-post-processing/remove-erroneous-client.yaml b/generator-input/client-post-processing/remove-erroneous-client.yaml new file mode 100644 index 000000000000..f933b440ed28 --- /dev/null +++ b/generator-input/client-post-processing/remove-erroneous-client.yaml @@ -0,0 +1,36 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: google-cloud-monitoring-dashboards has an erroneous client google/monitoring/dashboard +url: https://github.com/googleapis/google-cloud-python/issues/11858 +replacements: + - paths: [ + packages/google-cloud-monitoring-dashboards/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + dashboard_v1/services_ + dashboard_v1/types_ + after: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + monitoring_dashboard_v1/services_ + monitoring_dashboard_v1/types_ + count: 1 diff --git a/generator-input/client-post-processing/remove-unused-imports.yaml b/generator-input/client-post-processing/remove-unused-imports.yaml new file mode 100644 index 000000000000..c120e46ae4bc --- /dev/null +++ b/generator-input/client-post-processing/remove-unused-imports.yaml @@ -0,0 +1,34 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Remove unused imports +url: https://github.com/googleapis/gapic-generator-python/issues/1833 +replacements: + - paths: [ + packages/google-cloud-gke-hub/tests/unit/gapic/gkehub_v1/test_gke_hub.py + ] + before: | + from google.cloud.gkehub.configmanagement.v1 import configmanagement_pb2 # type: ignore + from google.cloud.gkehub.multiclusteringress.v1 import \( + multiclusteringress_pb2, + \) # type: ignore + after: "" + count: 1 + - paths: [ + packages/google-cloud-binary-authorization/tests/unit/gapic/binaryauthorization_v1/test_validation_helper_v1.py + ] + before: | + from grafeas.v1 import attestation_pb2 # type: ignore + from grafeas.v1 import common_pb2 # type: ignore + after: "" + count: 1 diff --git a/generator-input/client-post-processing/revert-reserved-words.yaml b/generator-input/client-post-processing/revert-reserved-words.yaml new file mode 100644 index 000000000000..e0195a3f1cb4 --- /dev/null +++ b/generator-input/client-post-processing/revert-reserved-words.yaml @@ -0,0 +1,41 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Contradicts reserved words defined in gapic-generator-python +url: https://github.com/googleapis/google-cloud-python/issues/11924 +replacements: + - paths: [ + packages/google-cloud-trace/google/cloud/trace_v2/types/trace.py, + ] + before: "type_" + after: "type" + count: 4 + - paths: [ + packages/google-cloud-kms/google/cloud/kms_v1/types/resources.py, + packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_key_management_service.py, + ] + before: "format_" + after: "format" + count: 7 + - paths: [ + packages/google-cloud-dataflow-client/google/cloud/dataflow_v1beta3/types/metrics.py + ] + before: set \(google.protobuf.struct_pb2.Value\) + after: set_ (google.protobuf.struct_pb2.Value) + count: 1 + - paths: [ + packages/google-cloud-dataflow-client/google/cloud/dataflow_v1beta3/types/metrics.py + ] + before: "set: struct_pb2.Value = proto.Field" + after: "set_: struct_pb2.Value = proto.Field" + count: 1 \ No newline at end of file diff --git a/generator-input/client-post-processing/sub-api-versioned-namespace.yaml b/generator-input/client-post-processing/sub-api-versioned-namespace.yaml new file mode 100644 index 000000000000..68f92a02dde1 --- /dev/null +++ b/generator-input/client-post-processing/sub-api-versioned-namespace.yaml @@ -0,0 +1,137 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Update sub-API namespace to reflect parent API +url: https://github.com/googleapis/gapic-generator-python/issues/1832 +replacements: + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/types/feature.py + ] + before: | + from google.cloud.gkehub.configmanagement.v1 import configmanagement_pb2 # type: ignore + from google.cloud.gkehub.multiclusteringress.v1 import \( + multiclusteringress_pb2, + \) # type: ignore + after: | + from google.cloud.gkehub_v1 import configmanagement_v1 # type: ignore + from google.cloud.gkehub_v1 import multiclusteringress_v1 # type: ignore + count: 1 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/types/feature.py + ] + before: google.cloud.gkehub.configmanagement.v1.configmanagement_pb2 + after: google.cloud.gkehub_v1.configmanagement_v1 + count: 2 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/types/feature.py + ] + before: google.cloud.gkehub.multiclusteringress.v1.multiclusteringress_pb2 + after: google.cloud.gkehub_v1.multiclusteringress_v1 + count: 1 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/types/feature.py + ] + before: multiclusteringress_pb2 + after: multiclusteringress_v1 + count: 2 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/types/feature.py + ] + before: configmanagement_pb2 + after: configmanagement_v1 + count: 4 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/configmanagement_v1/__init__.py + ] + before: | + from google.cloud.gkehub.configmanagement_v1 import gapic_version as package_version + after: | + from google.cloud.gkehub_v1 import gapic_version as package_version + count: 1 + - paths: [ + packages/google-cloud-gke-hub/google/cloud/gkehub_v1/multiclusteringress_v1/__init__.py + ] + before: | + from google.cloud.gkehub.multiclusteringress_v1 import gapic_version as package_version + after: | + from google.cloud.gkehub_v1 import gapic_version as package_version + count: 1 + - paths: [ + packages/google-cloud-gke-hub/docs/index.rst + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + gkehub_v1/services_ + gkehub_v1/types_\n + after: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + gkehub_v1/services_ + gkehub_v1/types_ + gkehub_v1/configmanagement_v1/services_ + gkehub_v1/configmanagement_v1/types_ + gkehub_v1/multiclusteringress_v1/services_ + gkehub_v1/multiclusteringress_v1/types_\n + count: 1 + - paths: [ + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/async_client.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/client.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/transports/base.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/transports/grpc_asyncio.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/transports/grpc.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/transports/rest_base.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/transports/rest.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/types/oslogin.py, + packages/google-cloud-os-login/tests/unit/gapic/oslogin_v1/test_os_login_service.py, + ] + before: | + from google.cloud.oslogin.common.types import common + after: | + from google.cloud.oslogin_v1.common.types import common + count: 9 + - paths: [ + packages/google-cloud-os-login/docs/index.rst, + ] + before: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + oslogin_v1/services_ + oslogin_v1/types_\n + after: | + API Reference + ------------- + .. toctree:: + :maxdepth: 2 + + oslogin_v1/services_ + oslogin_v1/types_ + oslogin_v1/common/types\n + count: 1 + - paths: [ + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/async_client.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/services/os_login_service/client.py, + packages/google-cloud-os-login/google/cloud/oslogin_v1/types/oslogin.py, + ] + before: google.cloud.oslogin.common + after: google.cloud.oslogin_v1.common + count: 17 \ No newline at end of file diff --git a/generator-input/client-post-processing/unique-grafeas-client.yaml b/generator-input/client-post-processing/unique-grafeas-client.yaml new file mode 100644 index 000000000000..9965bc00cccd --- /dev/null +++ b/generator-input/client-post-processing/unique-grafeas-client.yaml @@ -0,0 +1,1940 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Grafeas client is unique and requires customizations as described in PR 8186 below +url: https://github.com/googleapis/gapic-generator-python/issues/1830 +replacements: + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/async_client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ # Copy defaults from the synchronous client for use here. + \ # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + \ DEFAULT_ENDPOINT = GrafeasClient.DEFAULT_ENDPOINT + \ DEFAULT_MTLS_ENDPOINT = GrafeasClient.DEFAULT_MTLS_ENDPOINT + \ _DEFAULT_ENDPOINT_TEMPLATE = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE + \ _DEFAULT_UNIVERSE = GrafeasClient._DEFAULT_UNIVERSE\n + after: "" + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ # Note: DEFAULT_ENDPOINT is deprecated. Use _DEFAULT_ENDPOINT_TEMPLATE instead. + \ DEFAULT_ENDPOINT = "containeranalysis.googleapis.com" + \ DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__\( # type: ignore + \ DEFAULT_ENDPOINT + \ \) + \ + \ _DEFAULT_ENDPOINT_TEMPLATE = "containeranalysis.{UNIVERSE_DOMAIN}" + \ _DEFAULT_UNIVERSE = "googleapis.com"\n + after: "" + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/async_client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ @classmethod + \ def from_service_account_file\(cls, filename: str, \*args, \*\*kwargs\): + \ """Creates an instance of this client using the provided credentials + \ file. + \ + \ Args: + \ filename \(str\): The path to the service account private key json + \ file. + \ args: Additional arguments to pass to the constructor. + \ kwargs: Additional arguments to pass to the constructor. + \ + \ Returns: + \ GrafeasAsyncClient: The constructed client. + \ """ + \ return GrafeasClient.from_service_account_file.__func__\(GrafeasAsyncClient, filename, \*args, \*\*kwargs\) # type: ignore + \ + \ from_service_account_json = from_service_account_file + \ + \ @classmethod + \ def get_mtls_endpoint_and_cert_source\( + \ cls, client_options: Optional\[ClientOptions\] = None + \ \): + \ """Return the API endpoint and client cert source for mutual TLS. + \ + \ The client cert source is determined in the following order: + \ \(1\) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + \ client cert source is None. + \ \(2\) if `client_options.client_cert_source` is provided, use the provided one; if the + \ default client cert source exists, use the default one; otherwise the client cert + \ source is None. + \ + \ The API endpoint is determined in the following order: + \ \(1\) if `client_options.api_endpoint` if provided, use the provided one. + \ \(2\) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + \ default mTLS endpoint; if the environment variable is "never", use the default API + \ endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + \ use the default API endpoint. + \ + \ More details can be found at https://google.aip.dev/auth/4114. + \ + \ Args: + \ client_options \(google.api_core.client_options.ClientOptions\): Custom options for the + \ client. Only the `api_endpoint` and `client_cert_source` properties may be used + \ in this method. + \ + \ Returns: + \ Tuple\[str, Callable\[\[\], Tuple\[bytes, bytes\]\]\]: returns the API endpoint and the + \ client cert source to use. + \ + \ Raises: + \ google.auth.exceptions.MutualTLSChannelError: If any errors happen. + \ """ + \ return GrafeasClient.get_mtls_endpoint_and_cert_source\(client_options\) # type: ignore\n + after: "" + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/client.py, + ] + # Use backslashes to preserve leading spaces + before: | + \ @classmethod + \ def from_service_account_file\(cls, filename: str, \*args, \*\*kwargs\): + \ """Creates an instance of this client using the provided credentials + \ file. + \ + \ Args: + \ filename \(str\): The path to the service account private key json + \ file. + \ args: Additional arguments to pass to the constructor. + \ kwargs: Additional arguments to pass to the constructor. + \ + \ Returns: + \ GrafeasClient: The constructed client. + \ """ + \ credentials = service_account.Credentials.from_service_account_file\(filename\) + \ kwargs\["credentials"\] = credentials + \ return cls\(\*args, \*\*kwargs\) + \ + \ from_service_account_json = from_service_account_file\n + after: "" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: | + \)\n\n\n@pytest.mark.parametrize\( + "client_class,transport_class", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport\), + \(GrafeasAsyncClient, transports.GrafeasGrpcAsyncIOTransport\), + \], + \) + def test_api_key_credentials\(client_class, transport_class\): + with mock.patch.object\( + google.auth._default, "get_api_key_credentials", create=True + \) as get_api_key_credentials: + mock_cred = mock.Mock\(\) + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions\(\) + options.api_key = "api_key" + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options\) + patched.assert_called_once_with\( + credentials=mock_cred, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + after: ")\n" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + # Use backslashes to preserve leading spaces + before: | + def test_client_with_default_client_info\(\): + client_info = gapic_v1.client_info.ClientInfo\(\) + + with mock.patch.object\( + transports.GrafeasTransport, "_prep_wrapped_messages" + \) as prep: + client = GrafeasClient\( + credentials=ga_credentials.AnonymousCredentials\(\), + client_info=client_info, + \) + prep.assert_called_once_with\(client_info\) + + with mock.patch.object\( + transports.GrafeasTransport, "_prep_wrapped_messages" + \) as prep: + transport_class = GrafeasClient.get_transport_class\(\) + transport = transport_class\( + credentials=ga_credentials.AnonymousCredentials\(\), + client_info=client_info, + \) + prep.assert_called_once_with\(client_info\)\n\n + after: "" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: | + @pytest.mark.parametrize\( + "transport_name", + \[ + "grpc", + "grpc_asyncio", + "rest", + \], + \) + def test_grafeas_host_no_port\(transport_name\): + client = GrafeasClient\( + credentials=ga_credentials.AnonymousCredentials\(\), + client_options=client_options.ClientOptions\( + api_endpoint="containeranalysis.googleapis.com" + \), + transport=transport_name, + \) + assert client.transport._host == \( + "containeranalysis.googleapis.com:443" + if transport_name in \["grpc", "grpc_asyncio"\] + else "https://containeranalysis.googleapis.com" + \) + + + @pytest.mark.parametrize\( + "transport_name", + \[ + "grpc", + "grpc_asyncio", + "rest", + \], + \) + def test_grafeas_host_with_port\(transport_name\): + client = GrafeasClient\( + credentials=ga_credentials.AnonymousCredentials\(\), + client_options=client_options.ClientOptions\( + api_endpoint="containeranalysis.googleapis.com:8000" + \), + transport=transport_name, + \) + assert client.transport._host == \( + "containeranalysis.googleapis.com:8000" + if transport_name in \["grpc", "grpc_asyncio"\] + else "https://containeranalysis.googleapis.com:8000" + \) + + + @pytest.mark.parametrize\( + "transport_name", + \[ + "rest", + \], + \) + def test_grafeas_client_transport_session_collision\(transport_name\): + creds1 = ga_credentials.AnonymousCredentials\(\) + creds2 = ga_credentials.AnonymousCredentials\(\) + client1 = GrafeasClient\( + credentials=creds1, + transport=transport_name, + \) + client2 = GrafeasClient\( + credentials=creds2, + transport=transport_name, + \) + session1 = client1.transport.get_occurrence._session + session2 = client2.transport.get_occurrence._session + assert session1 != session2 + session1 = client1.transport.list_occurrences._session + session2 = client2.transport.list_occurrences._session + assert session1 != session2 + session1 = client1.transport.delete_occurrence._session + session2 = client2.transport.delete_occurrence._session + assert session1 != session2 + session1 = client1.transport.create_occurrence._session + session2 = client2.transport.create_occurrence._session + assert session1 != session2 + session1 = client1.transport.batch_create_occurrences._session + session2 = client2.transport.batch_create_occurrences._session + assert session1 != session2 + session1 = client1.transport.update_occurrence._session + session2 = client2.transport.update_occurrence._session + assert session1 != session2 + session1 = client1.transport.get_occurrence_note._session + session2 = client2.transport.get_occurrence_note._session + assert session1 != session2 + session1 = client1.transport.get_note._session + session2 = client2.transport.get_note._session + assert session1 != session2 + session1 = client1.transport.list_notes._session + session2 = client2.transport.list_notes._session + assert session1 != session2 + session1 = client1.transport.delete_note._session + session2 = client2.transport.delete_note._session + assert session1 != session2 + session1 = client1.transport.create_note._session + session2 = client2.transport.create_note._session + assert session1 != session2 + session1 = client1.transport.batch_create_notes._session + session2 = client2.transport.batch_create_notes._session + assert session1 != session2 + session1 = client1.transport.update_note._session + session2 = client2.transport.update_note._session + assert session1 != session2 + session1 = client1.transport.list_note_occurrences._session + session2 = client2.transport.list_note_occurrences._session + assert session1 != session2\n\n + after: "" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: | + def test_grafeas_base_transport_error\(\): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises\(core_exceptions.DuplicateCredentialArgs\): + transport = transports.GrafeasTransport\( + credentials=ga_credentials.AnonymousCredentials\(\), + credentials_file="credentials.json", + \)\n\n + after: "" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: | + def test_credentials_transport_error\(\): + # It is an error to provide credentials and a transport instance. + transport = transports.GrafeasGrpcTransport\( + credentials=ga_credentials.AnonymousCredentials\(\), + \) + with pytest.raises\(ValueError\): + client = GrafeasClient\( + credentials=ga_credentials.AnonymousCredentials\(\), + transport=transport, + \) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.GrafeasGrpcTransport\( + credentials=ga_credentials.AnonymousCredentials\(\), + \) + with pytest.raises\(ValueError\): + client = GrafeasClient\( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + \) + + # It is an error to provide an api_key and a transport instance. + transport = transports.GrafeasGrpcTransport\( + credentials=ga_credentials.AnonymousCredentials\(\), + \) + options = client_options.ClientOptions\(\) + options.api_key = "api_key" + with pytest.raises\(ValueError\): + client = GrafeasClient\( + client_options=options, + transport=transport, + \) + + # It is an error to provide an api_key and a credential. + options = client_options.ClientOptions\(\) + options.api_key = "api_key" + with pytest.raises\(ValueError\): + client = GrafeasClient\( + client_options=options, credentials=ga_credentials.AnonymousCredentials\(\) + \) + + # It is an error to provide scopes and a transport instance. + transport = transports.GrafeasGrpcTransport\( + credentials=ga_credentials.AnonymousCredentials\(\), + \) + with pytest.raises\(ValueError\): + client = GrafeasClient\( + client_options={"scopes": \["1", "2"\]}, + transport=transport, + \)\n\n + after: "" + count: 1 + - paths: [ + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: | + # If default endpoint is localhost, then default mtls endpoint will be the same. + # This method modifies the default endpoint so the client can produce a different + # mtls endpoint for endpoint testing purposes. + def modify_default_endpoint\(client\): + return \( + "foo.googleapis.com" + if \("localhost" in client.DEFAULT_ENDPOINT\) + else client.DEFAULT_ENDPOINT + \) + + + # If default endpoint template is localhost, then default mtls endpoint will be the same. + # This method modifies the default endpoint template so the client can produce a different + # mtls endpoint for endpoint testing purposes. + def modify_default_endpoint_template\(client\): + return \( + "test.{UNIVERSE_DOMAIN}" + if \("localhost" in client._DEFAULT_ENDPOINT_TEMPLATE\) + else client._DEFAULT_ENDPOINT_TEMPLATE + \) + + + def test__get_default_mtls_endpoint\(\): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert GrafeasClient._get_default_mtls_endpoint\(None\) is None + assert GrafeasClient._get_default_mtls_endpoint\(api_endpoint\) == api_mtls_endpoint + assert \( + GrafeasClient._get_default_mtls_endpoint\(api_mtls_endpoint\) == api_mtls_endpoint + \) + assert \( + GrafeasClient._get_default_mtls_endpoint\(sandbox_endpoint\) + == sandbox_mtls_endpoint + \) + assert \( + GrafeasClient._get_default_mtls_endpoint\(sandbox_mtls_endpoint\) + == sandbox_mtls_endpoint + \) + assert GrafeasClient._get_default_mtls_endpoint\(non_googleapi\) == non_googleapi + + + def test__read_environment_variables\(\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "auto", None\) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}\): + assert GrafeasClient._read_environment_variables\(\) == \(True, "auto", None\) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "auto", None\) + + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + \): + with pytest.raises\(ValueError\) as excinfo: + GrafeasClient._read_environment_variables\(\) + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + \) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "never", None\) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "always", None\) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "auto", None\) + + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}\): + with pytest.raises\(MutualTLSChannelError\) as excinfo: + GrafeasClient._read_environment_variables\(\) + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + \) + + with mock.patch.dict\(os.environ, {"GOOGLE_CLOUD_UNIVERSE_DOMAIN": "foo.com"}\): + assert GrafeasClient._read_environment_variables\(\) == \(False, "auto", "foo.com"\) + + + def test__get_client_cert_source\(\): + mock_provided_cert_source = mock.Mock\(\) + mock_default_cert_source = mock.Mock\(\) + + assert GrafeasClient._get_client_cert_source\(None, False\) is None + assert \( + GrafeasClient._get_client_cert_source\(mock_provided_cert_source, False\) is None + \) + assert \( + GrafeasClient._get_client_cert_source\(mock_provided_cert_source, True\) + == mock_provided_cert_source + \) + + with mock.patch\( + "google.auth.transport.mtls.has_default_client_cert_source", return_value=True + \): + with mock.patch\( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_default_cert_source, + \): + assert \( + GrafeasClient._get_client_cert_source\(None, True\) + is mock_default_cert_source + \) + assert \( + GrafeasClient._get_client_cert_source\(mock_provided_cert_source, "true"\) + is mock_provided_cert_source + \) + + + @mock.patch.object\( + GrafeasClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasClient\), + \) + @mock.patch.object\( + GrafeasAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasAsyncClient\), + \) + def test__get_api_endpoint\(\): + api_override = "foo.com" + mock_client_cert_source = mock.Mock\(\) + default_universe = GrafeasClient._DEFAULT_UNIVERSE + default_endpoint = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=default_universe + \) + mock_universe = "bar.com" + mock_endpoint = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=mock_universe + \) + + assert \( + GrafeasClient._get_api_endpoint\( + api_override, mock_client_cert_source, default_universe, "always" + \) + == api_override + \) + assert \( + GrafeasClient._get_api_endpoint\( + None, mock_client_cert_source, default_universe, "auto" + \) + == GrafeasClient.DEFAULT_MTLS_ENDPOINT + \) + assert \( + GrafeasClient._get_api_endpoint\(None, None, default_universe, "auto"\) + == default_endpoint + \) + assert \( + GrafeasClient._get_api_endpoint\(None, None, default_universe, "always"\) + == GrafeasClient.DEFAULT_MTLS_ENDPOINT + \) + assert \( + GrafeasClient._get_api_endpoint\( + None, mock_client_cert_source, default_universe, "always" + \) + == GrafeasClient.DEFAULT_MTLS_ENDPOINT + \) + assert \( + GrafeasClient._get_api_endpoint\(None, None, mock_universe, "never"\) + == mock_endpoint + \) + assert \( + GrafeasClient._get_api_endpoint\(None, None, default_universe, "never"\) + == default_endpoint + \) + + with pytest.raises\(MutualTLSChannelError\) as excinfo: + GrafeasClient._get_api_endpoint\( + None, mock_client_cert_source, mock_universe, "auto" + \) + assert \( + str\(excinfo.value\) + == "mTLS is not supported in any universe other than googleapis.com." + \) + + + def test__get_universe_domain\(\): + client_universe_domain = "foo.com" + universe_domain_env = "bar.com" + + assert \( + GrafeasClient._get_universe_domain\(client_universe_domain, universe_domain_env\) + == client_universe_domain + \) + assert \( + GrafeasClient._get_universe_domain\(None, universe_domain_env\) + == universe_domain_env + \) + assert \( + GrafeasClient._get_universe_domain\(None, None\) + == GrafeasClient._DEFAULT_UNIVERSE + \) + + with pytest.raises\(ValueError\) as excinfo: + GrafeasClient._get_universe_domain\("", None\) + assert str\(excinfo.value\) == "Universe Domain cannot be an empty string." + + + @pytest.mark.parametrize\( + "error_code,cred_info_json,show_cred_info", + \[ + \(401, CRED_INFO_JSON, True\), + \(403, CRED_INFO_JSON, True\), + \(404, CRED_INFO_JSON, True\), + \(500, CRED_INFO_JSON, False\), + \(401, None, False\), + \(403, None, False\), + \(404, None, False\), + \(500, None, False\), + \], + \) + def test__add_cred_info_for_auth_errors\(error_code, cred_info_json, show_cred_info\): + cred = mock.Mock\(\["get_cred_info"\]\) + cred.get_cred_info = mock.Mock\(return_value=cred_info_json\) + client = GrafeasClient\(credentials=cred\) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError\("message", details=\["foo"\]\) + error.code = error_code + + client._add_cred_info_for_auth_errors\(error\) + if show_cred_info: + assert error.details == \["foo", CRED_INFO_STRING\] + else: + assert error.details == \["foo"\] + + + @pytest.mark.parametrize\("error_code", \[401, 403, 404, 500\]\) + def test__add_cred_info_for_auth_errors_no_get_cred_info\(error_code\): + cred = mock.Mock\(\[\]\) + assert not hasattr\(cred, "get_cred_info"\) + client = GrafeasClient\(credentials=cred\) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError\("message", details=\[\]\) + error.code = error_code + + client._add_cred_info_for_auth_errors\(error\) + assert error.details == \[\] + + + @pytest.mark.parametrize\( + "client_class,transport_name", + \[ + \(GrafeasClient, "grpc"\), + \(GrafeasAsyncClient, "grpc_asyncio"\), + \(GrafeasClient, "rest"\), + \], + \) + def test_grafeas_client_from_service_account_info\(client_class, transport_name\): + creds = ga_credentials.AnonymousCredentials\(\) + with mock.patch.object\( + service_account.Credentials, "from_service_account_info" + \) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info\(info, transport=transport_name\) + assert client.transport._credentials == creds + assert isinstance\(client, client_class\) + + assert client.transport._host == \( + "containeranalysis.googleapis.com:443" + if transport_name in \["grpc", "grpc_asyncio"\] + else "https://containeranalysis.googleapis.com" + \) + + + @pytest.mark.parametrize\( + "transport_class,transport_name", + \[ + \(transports.GrafeasGrpcTransport, "grpc"\), + \(transports.GrafeasGrpcAsyncIOTransport, "grpc_asyncio"\), + \(transports.GrafeasRestTransport, "rest"\), + \], + \) + def test_grafeas_client_service_account_always_use_jwt\(transport_class, transport_name\): + with mock.patch.object\( + service_account.Credentials, "with_always_use_jwt_access", create=True + \) as use_jwt: + creds = service_account.Credentials\(None, None, None\) + transport = transport_class\(credentials=creds, always_use_jwt_access=True\) + use_jwt.assert_called_once_with\(True\) + + with mock.patch.object\( + service_account.Credentials, "with_always_use_jwt_access", create=True + \) as use_jwt: + creds = service_account.Credentials\(None, None, None\) + transport = transport_class\(credentials=creds, always_use_jwt_access=False\) + use_jwt.assert_not_called\(\) + + + @pytest.mark.parametrize\( + "client_class,transport_name", + \[ + \(GrafeasClient, "grpc"\), + \(GrafeasAsyncClient, "grpc_asyncio"\), + \(GrafeasClient, "rest"\), + \], + \) + def test_grafeas_client_from_service_account_file\(client_class, transport_name\): + creds = ga_credentials.AnonymousCredentials\(\) + with mock.patch.object\( + service_account.Credentials, "from_service_account_file" + \) as factory: + factory.return_value = creds + client = client_class.from_service_account_file\( + "dummy/file/path.json", transport=transport_name + \) + assert client.transport._credentials == creds + assert isinstance\(client, client_class\) + + client = client_class.from_service_account_json\( + "dummy/file/path.json", transport=transport_name + \) + assert client.transport._credentials == creds + assert isinstance\(client, client_class\) + + assert client.transport._host == \( + "containeranalysis.googleapis.com:443" + if transport_name in \["grpc", "grpc_asyncio"\] + else "https://containeranalysis.googleapis.com" + \) + + + def test_grafeas_client_get_transport_class\(\): + transport = GrafeasClient.get_transport_class\(\) + available_transports = \[ + transports.GrafeasGrpcTransport, + transports.GrafeasRestTransport, + \] + assert transport in available_transports + + transport = GrafeasClient.get_transport_class\("grpc"\) + assert transport == transports.GrafeasGrpcTransport + + + @pytest.mark.parametrize\( + "client_class,transport_class,transport_name", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc"\), + \(GrafeasAsyncClient, transports.GrafeasGrpcAsyncIOTransport, "grpc_asyncio"\), + \(GrafeasClient, transports.GrafeasRestTransport, "rest"\), + \], + \) + @mock.patch.object\( + GrafeasClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasClient\), + \) + @mock.patch.object\( + GrafeasAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasAsyncClient\), + \) + def test_grafeas_client_client_options\(client_class, transport_class, transport_name\): + # Check that if channel is provided we won't create a new one. + with mock.patch.object\(GrafeasClient, "get_transport_class"\) as gtc: + transport = transport_class\(credentials=ga_credentials.AnonymousCredentials\(\)\) + client = client_class\(transport=transport\) + gtc.assert_not_called\(\) + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object\(GrafeasClient, "get_transport_class"\) as gtc: + client = client_class\(transport=transport_name\) + gtc.assert_called\(\) + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions\(api_endpoint="squid.clam.whelk"\) + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(transport=transport_name, client_options=options\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}\): + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}\): + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}\): + with pytest.raises\(MutualTLSChannelError\) as excinfo: + client = client_class\(transport=transport_name\) + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + \) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + \): + with pytest.raises\(ValueError\) as excinfo: + client = client_class\(transport=transport_name\) + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + \) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions\(quota_project_id="octopus"\) + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + # Check the case api_endpoint is provided + options = client_options.ClientOptions\( + api_audience="https://language.googleapis.com" + \) + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + \) + + + @pytest.mark.parametrize\( + "client_class,transport_class,transport_name,use_client_cert_env", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc", "true"\), + \( + GrafeasAsyncClient, + transports.GrafeasGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + \), + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc", "false"\), + \( + GrafeasAsyncClient, + transports.GrafeasGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + \), + \(GrafeasClient, transports.GrafeasRestTransport, "rest", "true"\), + \(GrafeasClient, transports.GrafeasRestTransport, "rest", "false"\), + \], + \) + @mock.patch.object\( + GrafeasClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasClient\), + \) + @mock.patch.object\( + GrafeasAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasAsyncClient\), + \) + @mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}\) + def test_grafeas_client_mtls_env_auto\( + client_class, transport_class, transport_name, use_client_cert_env + \): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + \): + options = client_options.ClientOptions\( + client_cert_source=client_cert_source_callback + \) + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \) + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + \): + with mock.patch.object\(transport_class, "__init__"\) as patched: + with mock.patch\( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + \): + with mock.patch\( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + \): + if use_client_cert_env == "false": + expected_host = client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \) + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class\(transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + \): + with mock.patch.object\(transport_class, "__init__"\) as patched: + with mock.patch\( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + \): + patched.return_value = None + client = client_class\(transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + + @pytest.mark.parametrize\("client_class", \[GrafeasClient, GrafeasAsyncClient\]\) + @mock.patch.object\( + GrafeasClient, "DEFAULT_ENDPOINT", modify_default_endpoint\(GrafeasClient\) + \) + @mock.patch.object\( + GrafeasAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint\(GrafeasAsyncClient\) + \) + def test_grafeas_client_get_mtls_endpoint_and_cert_source\(client_class\): + mock_client_cert_source = mock.Mock\(\) + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}\): + mock_api_endpoint = "foo" + options = client_options.ClientOptions\( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + \) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source\( + options + \) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}\): + mock_client_cert_source = mock.Mock\(\) + mock_api_endpoint = "foo" + options = client_options.ClientOptions\( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + \) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source\( + options + \) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}\): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source\(\) + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}\): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source\(\) + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}\): + with mock.patch\( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + \): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source\(\) + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}\): + with mock.patch\( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + \): + with mock.patch\( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + \): + \( + api_endpoint, + cert_source, + \) = client_class.get_mtls_endpoint_and_cert_source\(\) + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}\): + with pytest.raises\(MutualTLSChannelError\) as excinfo: + client_class.get_mtls_endpoint_and_cert_source\(\) + + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + \) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict\( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + \): + with pytest.raises\(ValueError\) as excinfo: + client_class.get_mtls_endpoint_and_cert_source\(\) + + assert \( + str\(excinfo.value\) + == "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + \) + + + @pytest.mark.parametrize\("client_class", \[GrafeasClient, GrafeasAsyncClient\]\) + @mock.patch.object\( + GrafeasClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasClient\), + \) + @mock.patch.object\( + GrafeasAsyncClient, + "_DEFAULT_ENDPOINT_TEMPLATE", + modify_default_endpoint_template\(GrafeasAsyncClient\), + \) + def test_grafeas_client_client_api_endpoint\(client_class\): + mock_client_cert_source = client_cert_source_callback + api_override = "foo.com" + default_universe = GrafeasClient._DEFAULT_UNIVERSE + default_endpoint = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=default_universe + \) + mock_universe = "bar.com" + mock_endpoint = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=mock_universe + \) + + # If ClientOptions.api_endpoint is set and GOOGLE_API_USE_CLIENT_CERTIFICATE="true", + # use ClientOptions.api_endpoint as the api endpoint regardless. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}\): + with mock.patch\( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + \): + options = client_options.ClientOptions\( + client_cert_source=mock_client_cert_source, api_endpoint=api_override + \) + client = client_class\( + client_options=options, + credentials=ga_credentials.AnonymousCredentials\(\), + \) + assert client.api_endpoint == api_override + + # If ClientOptions.api_endpoint is not set and GOOGLE_API_USE_MTLS_ENDPOINT="never", + # use the _DEFAULT_ENDPOINT_TEMPLATE populated with GDU as the api endpoint. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}\): + client = client_class\(credentials=ga_credentials.AnonymousCredentials\(\)\) + assert client.api_endpoint == default_endpoint + + # If ClientOptions.api_endpoint is not set and GOOGLE_API_USE_MTLS_ENDPOINT="always", + # use the DEFAULT_MTLS_ENDPOINT as the api endpoint. + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}\): + client = client_class\(credentials=ga_credentials.AnonymousCredentials\(\)\) + assert client.api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + + # If ClientOptions.api_endpoint is not set, GOOGLE_API_USE_MTLS_ENDPOINT="auto" \(default\), + # GOOGLE_API_USE_CLIENT_CERTIFICATE="false" \(default\), default cert source doesn't exist, + # and ClientOptions.universe_domain="bar.com", + # use the _DEFAULT_ENDPOINT_TEMPLATE populated with universe domain as the api endpoint. + options = client_options.ClientOptions\(\) + universe_exists = hasattr\(options, "universe_domain"\) + if universe_exists: + options = client_options.ClientOptions\(universe_domain=mock_universe\) + client = client_class\( + client_options=options, credentials=ga_credentials.AnonymousCredentials\(\) + \) + else: + client = client_class\( + client_options=options, credentials=ga_credentials.AnonymousCredentials\(\) + \) + assert client.api_endpoint == \( + mock_endpoint if universe_exists else default_endpoint + \) + assert client.universe_domain == \( + mock_universe if universe_exists else default_universe + \) + + # If ClientOptions does not have a universe domain attribute and GOOGLE_API_USE_MTLS_ENDPOINT="never", + # use the _DEFAULT_ENDPOINT_TEMPLATE populated with GDU as the api endpoint. + options = client_options.ClientOptions\(\) + if hasattr\(options, "universe_domain"\): + delattr\(options, "universe_domain"\) + with mock.patch.dict\(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}\): + client = client_class\( + client_options=options, credentials=ga_credentials.AnonymousCredentials\(\) + \) + assert client.api_endpoint == default_endpoint + + + @pytest.mark.parametrize\( + "client_class,transport_class,transport_name", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc"\), + \(GrafeasAsyncClient, transports.GrafeasGrpcAsyncIOTransport, "grpc_asyncio"\), + \(GrafeasClient, transports.GrafeasRestTransport, "rest"\), + \], + \) + def test_grafeas_client_client_options_scopes\( + client_class, transport_class, transport_name + \): + # Check the case scopes are provided. + options = client_options.ClientOptions\( + scopes=\["1", "2"\], + \) + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file=None, + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=\["1", "2"\], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + + @pytest.mark.parametrize\( + "client_class,transport_class,transport_name,grpc_helpers", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc", grpc_helpers\), + \( + GrafeasAsyncClient, + transports.GrafeasGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + \), + \(GrafeasClient, transports.GrafeasRestTransport, "rest", None\), + \], + \) + def test_grafeas_client_client_options_credentials_file\( + client_class, transport_class, transport_name, grpc_helpers + \): + # Check the case credentials file is provided. + options = client_options.ClientOptions\(credentials_file="credentials.json"\) + + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file="credentials.json", + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + + def test_grafeas_client_client_options_from_dict\(\): + with mock.patch\( + "grafeas.grafeas_v1.services.grafeas.transports.GrafeasGrpcTransport.__init__" + \) as grpc_transport: + grpc_transport.return_value = None + client = GrafeasClient\(client_options={"api_endpoint": "squid.clam.whelk"}\) + grpc_transport.assert_called_once_with\( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + + @pytest.mark.parametrize\( + "client_class,transport_class,transport_name,grpc_helpers", + \[ + \(GrafeasClient, transports.GrafeasGrpcTransport, "grpc", grpc_helpers\), + \( + GrafeasAsyncClient, + transports.GrafeasGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + \), + \], + \) + def test_grafeas_client_create_channel_credentials_file\( + client_class, transport_class, transport_name, grpc_helpers + \): + # Check the case credentials file is provided. + options = client_options.ClientOptions\(credentials_file="credentials.json"\) + + with mock.patch.object\(transport_class, "__init__"\) as patched: + patched.return_value = None + client = client_class\(client_options=options, transport=transport_name\) + patched.assert_called_once_with\( + credentials=None, + credentials_file="credentials.json", + host=client._DEFAULT_ENDPOINT_TEMPLATE.format\( + UNIVERSE_DOMAIN=client._DEFAULT_UNIVERSE + \), + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + \) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object\( + google.auth, "load_credentials_from_file", autospec=True + \) as load_creds, mock.patch.object\( + google.auth, "default", autospec=True + \) as adc, mock.patch.object\( + grpc_helpers, "create_channel" + \) as create_channel: + creds = ga_credentials.AnonymousCredentials\(\) + file_creds = ga_credentials.AnonymousCredentials\(\) + load_creds.return_value = \(file_creds, None\) + adc.return_value = \(creds, None\) + client = client_class\(client_options=options, transport=transport_name\) + create_channel.assert_called_with\( + "containeranalysis.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=\(\), + scopes=None, + default_host="containeranalysis.googleapis.com", + ssl_credentials=None, + options=\[ + \("grpc.max_send_message_length", -1\), + \("grpc.max_receive_message_length", -1\), + \], + \)\n\n + after: "" + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/transports/base.py, + packages/grafeas/grafeas/grafeas_v1/services/grafeas/transports/grpc_asyncio.py, + packages/grafeas/grafeas/grafeas_v1/services/grafeas/transports/grpc.py, + packages/grafeas/grafeas/grafeas_v1/services/grafeas/transports/rest.py, + packages/grafeas/tests/unit/gapic/grafeas_v1/test_grafeas.py, + ] + before: "containeranalysis.googleapis.com" + after: "" + count: 12 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/client.py, + ] + before: | + \}\n + \ @classmethod + \ def get_mtls_endpoint_and_cert_source\( + \ cls, client_options: Optional\[client_options_lib.ClientOptions\] = None + \ \): + \ """Deprecated. Return the API endpoint and client cert source for mutual TLS. + \ + \ The client cert source is determined in the following order: + \ \(1\) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + \ client cert source is None. + \ \(2\) if `client_options.client_cert_source` is provided, use the provided one; if the + \ default client cert source exists, use the default one; otherwise the client cert + \ source is None. + \ + \ The API endpoint is determined in the following order: + \ \(1\) if `client_options.api_endpoint` if provided, use the provided one. + \ \(2\) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + \ default mTLS endpoint; if the environment variable is "never", use the default API + \ endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + \ use the default API endpoint. + \ + \ More details can be found at https://google.aip.dev/auth/4114. + \ + \ Args: + \ client_options \(google.api_core.client_options.ClientOptions\): Custom options for the + \ client. Only the `api_endpoint` and `client_cert_source` properties may be used + \ in this method. + \ + \ Returns: + \ Tuple\[str, Callable\[\[\], Tuple\[bytes, bytes\]\]\]: returns the API endpoint and the + \ client cert source to use. + \ + \ Raises: + \ google.auth.exceptions.MutualTLSChannelError: If any errors happen. + \ """ + \ + \ warnings.warn\( + \ "get_mtls_endpoint_and_cert_source is deprecated. Use the api_endpoint property instead.", + \ DeprecationWarning, + \ \) + \ if client_options is None: + \ client_options = client_options_lib.ClientOptions\(\) + \ use_client_cert = os.getenv\("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false"\) + \ use_mtls_endpoint = os.getenv\("GOOGLE_API_USE_MTLS_ENDPOINT", "auto"\) + \ if use_client_cert not in \("true", "false"\): + \ raise ValueError\( + \ "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + \ \) + \ if use_mtls_endpoint not in \("auto", "never", "always"\): + \ raise MutualTLSChannelError\( + \ "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + \ \) + \ + \ # Figure out the client cert source to use. + \ client_cert_source = None + \ if use_client_cert == "true": + \ if client_options.client_cert_source: + \ client_cert_source = client_options.client_cert_source + \ elif mtls.has_default_client_cert_source\(\): + \ client_cert_source = mtls.default_client_cert_source\(\) + \ + \ # Figure out which api endpoint to use. + \ if client_options.api_endpoint is not None: + \ api_endpoint = client_options.api_endpoint + \ elif use_mtls_endpoint == "always" or \( + \ use_mtls_endpoint == "auto" and client_cert_source + \ \): + \ api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + \ else: + \ api_endpoint = cls.DEFAULT_ENDPOINT + \ + \ return api_endpoint, client_cert_source + \ + \ @staticmethod + \ def _read_environment_variables\(\): + \ """Returns the environment variables used by the client. + \ + \ Returns: + \ Tuple\[bool, str, str\]: returns the GOOGLE_API_USE_CLIENT_CERTIFICATE, + \ GOOGLE_API_USE_MTLS_ENDPOINT, and GOOGLE_CLOUD_UNIVERSE_DOMAIN environment variables. + \ + \ Raises: + \ ValueError: If GOOGLE_API_USE_CLIENT_CERTIFICATE is not + \ any of \["true", "false"\]. + \ google.auth.exceptions.MutualTLSChannelError: If GOOGLE_API_USE_MTLS_ENDPOINT + \ is not any of \["auto", "never", "always"\]. + \ """ + \ use_client_cert = os.getenv\( + \ "GOOGLE_API_USE_CLIENT_CERTIFICATE", "false" + \ \).lower\(\) + \ use_mtls_endpoint = os.getenv\("GOOGLE_API_USE_MTLS_ENDPOINT", "auto"\).lower\(\) + \ universe_domain_env = os.getenv\("GOOGLE_CLOUD_UNIVERSE_DOMAIN"\) + \ if use_client_cert not in \("true", "false"\): + \ raise ValueError\( + \ "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + \ \) + \ if use_mtls_endpoint not in \("auto", "never", "always"\): + \ raise MutualTLSChannelError\( + \ "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + \ \) + \ return use_client_cert == "true", use_mtls_endpoint, universe_domain_env + \ + \ @staticmethod + \ def _get_client_cert_source\(provided_cert_source, use_cert_flag\): + \ """Return the client cert source to be used by the client. + \ + \ Args: + \ provided_cert_source \(bytes\): The client certificate source provided. + \ use_cert_flag \(bool\): A flag indicating whether to use the client certificate. + \ + \ Returns: + \ bytes or None: The client cert source to be used by the client. + \ """ + \ client_cert_source = None + \ if use_cert_flag: + \ if provided_cert_source: + \ client_cert_source = provided_cert_source + \ elif mtls.has_default_client_cert_source\(\): + \ client_cert_source = mtls.default_client_cert_source\(\) + \ return client_cert_source + \ + \ @staticmethod + \ def _get_api_endpoint\( + \ api_override, client_cert_source, universe_domain, use_mtls_endpoint + \ \): + \ """Return the API endpoint used by the client. + \ + \ Args: + \ api_override \(str\): The API endpoint override. If specified, this is always + \ the return value of this function and the other arguments are not used. + \ client_cert_source \(bytes\): The client certificate source used by the client. + \ universe_domain \(str\): The universe domain used by the client. + \ use_mtls_endpoint \(str\): How to use the mTLS endpoint, which depends also on the other parameters. + \ Possible values are "always", "auto", or "never". + \ + \ Returns: + \ str: The API endpoint to be used by the client. + \ """ + \ if api_override is not None: + \ api_endpoint = api_override + \ elif use_mtls_endpoint == "always" or \( + \ use_mtls_endpoint == "auto" and client_cert_source + \ \): + \ _default_universe = GrafeasClient._DEFAULT_UNIVERSE + \ if universe_domain != _default_universe: + \ raise MutualTLSChannelError\( + \ f"mTLS is not supported in any universe other than {_default_universe}." + \ \) + \ api_endpoint = GrafeasClient.DEFAULT_MTLS_ENDPOINT + \ else: + \ api_endpoint = GrafeasClient._DEFAULT_ENDPOINT_TEMPLATE.format\( + \ UNIVERSE_DOMAIN=universe_domain + \ \) + \ return api_endpoint + \ + \ @staticmethod + \ def _get_universe_domain\( + \ client_universe_domain: Optional\[str\], universe_domain_env: Optional\[str\] + \ \) -> str: + \ """Return the universe domain used by the client. + \ + \ Args: + \ client_universe_domain \(Optional\[str\]\): The universe domain configured via the client options. + \ universe_domain_env \(Optional\[str\]\): The universe domain configured via the "GOOGLE_CLOUD_UNIVERSE_DOMAIN" environment variable. + \ + \ Returns: + \ str: The universe domain to be used by the client. + \ + \ Raises: + \ ValueError: If the universe domain is an empty string. + \ """ + \ universe_domain = GrafeasClient._DEFAULT_UNIVERSE + \ if client_universe_domain is not None: + \ universe_domain = client_universe_domain + \ elif universe_domain_env is not None: + \ universe_domain = universe_domain_env + \ if len\(universe_domain.strip\(\)\) == 0: + \ raise ValueError\("Universe Domain cannot be an empty string."\) + \ return universe_domain + \ + \ def _validate_universe_domain\(self\): + \ """Validates client's and credentials' universe domains are consistent. + \ + \ Returns: + \ bool: True iff the configured universe domain is valid. + \ + \ Raises: + \ ValueError: If the configured universe domain is not valid. + \ """ + \ + \ # NOTE \(b\/349488459\): universe validation is disabled until further notice. + \ return True + \ + \ def _add_cred_info_for_auth_errors\( + \ self, error: core_exceptions.GoogleAPICallError + \ \) -> None: + \ """Adds credential info string to error details for 401/403/404 errors. + \ + \ Args: + \ error \(google.api_core.exceptions.GoogleAPICallError\): The error to add the cred info. + \ """ + \ if error.code not in \[ + \ HTTPStatus.UNAUTHORIZED, + \ HTTPStatus.FORBIDDEN, + \ HTTPStatus.NOT_FOUND, + \ \]: + \ return + \ + \ cred = self._transport._credentials + \ + \ # get_cred_info is only available in google-auth>=2.35.0 + \ if not hasattr\(cred, "get_cred_info"\): + \ return + \ + \ # ignore the type check since pypy test fails when get_cred_info + \ # is not available + \ cred_info = cred.get_cred_info\(\) # type: ignore + \ if cred_info and hasattr\(error._details, "append"\): + \ error._details.append\(json.dumps\(cred_info\)\) + \ + \ @property + \ def api_endpoint\(self\): + \ """Return the API endpoint used by the client instance. + \ + \ Returns: + \ str: The API endpoint used by the client instance. + \ """ + \ return self._api_endpoint + \ + \ @property + \ def universe_domain\(self\) -> str: + \ """Return the universe domain used by the client instance. + \ + \ Returns: + \ str: The universe domain used by the client instance. + \ """ + \ return self._universe_domain\n + after: "}" + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ def __init__\( + \ self, + \ \*, + \ credentials: Optional\[ga_credentials.Credentials\] = None, + \ transport: Optional\[ + \ Union\[str, GrafeasTransport, Callable\[..., GrafeasTransport\]\] + \ \] = None, + \ client_options: Optional\[Union\[client_options_lib.ClientOptions, dict\]\] = None, + \ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + \ \) -> None: + \ """Instantiates the grafeas client. + \ + \ Args: + \ credentials \(Optional\[google.auth.credentials.Credentials\]\): The + \ authorization credentials to attach to requests. These + \ credentials identify the application to the service; if none + \ are specified, the client will attempt to ascertain the + \ credentials from the environment. + \ transport \(Optional\[Union\[str,GrafeasTransport,Callable\[..., GrafeasTransport\]\]\]\): + \ The transport to use, or a Callable that constructs and returns a new transport. + \ If a Callable is given, it will be called with the same set of initialization + \ arguments as used in the GrafeasTransport constructor. + \ If set to None, a transport is chosen automatically. + \ client_options \(Optional\[Union\[google.api_core.client_options.ClientOptions, dict\]\]\): + \ Custom options for the client. + \ + \ 1. The ``api_endpoint`` property can be used to override the + \ default endpoint provided by the client when ``transport`` is + \ not explicitly provided. Only if this property is not set and + \ ``transport`` was not explicitly provided, the endpoint is + \ determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment + \ variable, which have one of the following values: + \ "always" \(always use the default mTLS endpoint\), "never" \(always + \ use the default regular endpoint\) and "auto" \(auto-switch to the + \ default mTLS endpoint if client certificate is present; this is + \ the default value\). + \ + \ 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + \ is "true", then the ``client_cert_source`` property can be used + \ to provide a client certificate for mTLS transport. If + \ not provided, the default SSL client certificate will be used if + \ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + \ set, no client certificate will be used. + \ + \ 3. The ``universe_domain`` property can be used to override the + \ default "googleapis.com" universe. Note that the ``api_endpoint`` + \ property still takes precedence; and ``universe_domain`` is + \ currently not supported for mTLS. + \ + \ client_info \(google.api_core.gapic_v1.client_info.ClientInfo\): + \ The client info used to send a user-agent string along with + \ API requests. If ``None``, then default info will be used. + \ Generally, you only need to set this if you're developing + \ your own client library. + \ + \ Raises: + \ google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + \ creation failed for any reason. + \ """ + \ self._client_options = client_options + \ if isinstance\(self._client_options, dict\): + \ self._client_options = client_options_lib.from_dict\(self._client_options\) + \ if self._client_options is None: + \ self._client_options = client_options_lib.ClientOptions\(\) + \ self._client_options = cast\( + \ client_options_lib.ClientOptions, self._client_options + \ \) + \ + \ universe_domain_opt = getattr\(self._client_options, "universe_domain", None\) + \ + \ \( + \ self._use_client_cert, + \ self._use_mtls_endpoint, + \ self._universe_domain_env, + \ \) = GrafeasClient._read_environment_variables\(\) + \ self._client_cert_source = GrafeasClient._get_client_cert_source\( + \ self._client_options.client_cert_source, self._use_client_cert + \ \) + \ self._universe_domain = GrafeasClient._get_universe_domain\( + \ universe_domain_opt, self._universe_domain_env + \ \) + \ self._api_endpoint = None # updated below, depending on `transport` + \ + \ # Initialize the universe domain validation. + \ self._is_universe_domain_valid = False + \ + \ if CLIENT_LOGGING_SUPPORTED: # pragma: NO COVER + \ # Setup logging. + \ client_logging.initialize_logging\(\) + \ + \ api_key_value = getattr\(self._client_options, "api_key", None\) + \ if api_key_value and credentials: + \ raise ValueError\( + \ "client_options.api_key and credentials are mutually exclusive" + \ \) + \ + \ # Save or instantiate the transport. + \ # Ordinarily, we provide the transport, but allowing a custom transport + \ # instance provides an extensibility point for unusual situations. + \ transport_provided = isinstance\(transport, GrafeasTransport\) + \ if transport_provided: + \ # transport is a GrafeasTransport instance. + \ if credentials or self._client_options.credentials_file or api_key_value: + \ raise ValueError\( + \ "When providing a transport instance, " + \ "provide its credentials directly." + \ \) + \ if self._client_options.scopes: + \ raise ValueError\( + \ "When providing a transport instance, provide its scopes " + \ "directly." + \ \) + \ self._transport = cast\(GrafeasTransport, transport\) + \ self._api_endpoint = self._transport.host + \ + \ self._api_endpoint = self._api_endpoint or GrafeasClient._get_api_endpoint\( + \ self._client_options.api_endpoint, + \ self._client_cert_source, + \ self._universe_domain, + \ self._use_mtls_endpoint, + \ \) + \ + \ if not transport_provided: + \ import google.auth._default # type: ignore + \ + \ if api_key_value and hasattr\( + \ google.auth._default, "get_api_key_credentials" + \ \): + \ credentials = google.auth._default.get_api_key_credentials\( + \ api_key_value + \ \) + \ + \ transport_init: Union\[ + \ Type\[GrafeasTransport\], Callable\[..., GrafeasTransport\] + \ \] = \( + \ GrafeasClient.get_transport_class\(transport\) + \ if isinstance\(transport, str\) or transport is None + \ else cast\(Callable\[..., GrafeasTransport\], transport\) + \ \) + \ # initialize with the provided callable or the passed in class + \ self._transport = transport_init\( + \ credentials=credentials, + \ credentials_file=self._client_options.credentials_file, + \ host=self._api_endpoint, + \ scopes=self._client_options.scopes, + \ client_cert_source_for_mtls=self._client_cert_source, + \ quota_project_id=self._client_options.quota_project_id, + \ client_info=client_info, + \ always_use_jwt_access=True, + \ api_audience=self._client_options.api_audience, + \ \) + \ + \ if "async" not in str\(self._transport\): + \ if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor\( + \ std_logging.DEBUG + \ \): # pragma: NO COVER + \ _LOGGER.debug\( + \ "Created client `grafeas_v1.GrafeasClient`.", + \ extra=\{ + \ "serviceName": "grafeas.v1.Grafeas", + \ "universeDomain": getattr\( + \ self._transport._credentials, "universe_domain", "" + \ \), + \ "credentialsType": f"\{type\(self._transport._credentials\).__module__\}.\{type\(self._transport._credentials\).__qualname__\}", + \ "credentialsInfo": getattr\( + \ self.transport._credentials, "get_cred_info", lambda: None + \ \)\(\), + \ \} + \ if hasattr\(self._transport, "_credentials"\) + \ else \{ + \ "serviceName": "grafeas.v1.Grafeas", + \ "credentialsType": None, + \ \}, + \ \) + after: | + \n + def __init__( + self, + *, + transport: Union[str, GrafeasTransport] = None, + credentials: Optional[ga_credentials.Credentials] = None, + ) -> None: + """Instantiate the grafeas client. + + Args: + transport (Union[str, ~.GrafeasTransport]): The + transport to use. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + + if isinstance(transport, GrafeasTransport): + self._transport = transport + else: + Transport = GrafeasClient.get_transport_class(transport) + self._transport = Transport(credentials=credentials) + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/async_client.py + ] + before: | + GrafeasClient.get_transport_class\n + \ def __init__\( + \ self, + \ \*, + \ credentials: Optional\[ga_credentials.Credentials\] = None, + \ transport: Optional\[ + \ Union\[str, GrafeasTransport, Callable\[..., GrafeasTransport\]\] + \ \] = "grpc_asyncio", + \ client_options: Optional\[ClientOptions\] = None, + \ client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + \ \) -> None: + \ """Instantiates the grafeas async client. + \ + \ Args: + \ credentials \(Optional\[google.auth.credentials.Credentials\]\): The + \ authorization credentials to attach to requests. These + \ credentials identify the application to the service; if none + \ are specified, the client will attempt to ascertain the + \ credentials from the environment. + \ transport \(Optional\[Union\[str,GrafeasTransport,Callable\[..., GrafeasTransport\]\]\]\): + \ The transport to use, or a Callable that constructs and returns a new transport to use. + \ If a Callable is given, it will be called with the same set of initialization + \ arguments as used in the GrafeasTransport constructor. + \ If set to None, a transport is chosen automatically. + \ client_options \(Optional\[Union\[google.api_core.client_options.ClientOptions, dict\]\]\): + \ Custom options for the client. + \ + \ 1. The ``api_endpoint`` property can be used to override the + \ default endpoint provided by the client when ``transport`` is + \ not explicitly provided. Only if this property is not set and + \ ``transport`` was not explicitly provided, the endpoint is + \ determined by the GOOGLE_API_USE_MTLS_ENDPOINT environment + \ variable, which have one of the following values: + \ "always" \(always use the default mTLS endpoint\), "never" \(always + \ use the default regular endpoint\) and "auto" \(auto-switch to the + \ default mTLS endpoint if client certificate is present; this is + \ the default value\). + \ + \ 2. If the GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + \ is "true", then the ``client_cert_source`` property can be used + \ to provide a client certificate for mTLS transport. If + \ not provided, the default SSL client certificate will be used if + \ present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + \ set, no client certificate will be used. + \ + \ 3. The ``universe_domain`` property can be used to override the + \ default "googleapis.com" universe. Note that ``api_endpoint`` + \ property still takes precedence; and ``universe_domain`` is + \ currently not supported for mTLS. + \ + \ client_info \(google.api_core.gapic_v1.client_info.ClientInfo\): + \ The client info used to send a user-agent string along with + \ API requests. If ``None``, then default info will be used. + \ Generally, you only need to set this if you're developing + \ your own client library. + \ + \ Raises: + \ google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + \ creation failed for any reason. + \ """ + \ self._client = GrafeasClient\( + \ credentials=credentials, + \ transport=transport, + \ client_options=client_options, + \ client_info=client_info, + \ \) + after: | + GrafeasClient.get_transport_class\n + def __init__( + self, + *, + transport: Union[str, GrafeasTransport] = "grpc_asyncio", + credentials: Optional[ga_credentials.Credentials] = None, + ) -> None: + """Instantiate the grafeas client. + + Args: + transport (Union[str, ~.GrafeasTransport]): The + transport to use. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + + self._client = GrafeasClient( + transport=transport, + credentials=credentials, + ) + count: 1 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ # Validate the universe domain. + \ self._validate_universe_domain\(\)\n + after: "" + count: 14 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/async_client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ # Validate the universe domain. + \ self._client._validate_universe_domain\(\)\n + after: "" + count: 14 + - paths: [ + packages/grafeas/grafeas/grafeas_v1/services/grafeas/async_client.py + ] + # Use backslashes to preserve leading spaces + before: | + \ @property + \ def api_endpoint\(self\): + \ """Return the API endpoint used by the client instance. + \ + \ Returns: + \ str: The API endpoint used by the client instance. + \ """ + \ return self._client._api_endpoint + \ + \ @property + \ def universe_domain\(self\) -> str: + \ """Return the universe domain used by the client instance. + \ + \ Returns: + \ str: The universe domain used + \ by the client instance. + \ """ + \ return self._client._universe_domain\n + after: "" + count: 1 diff --git a/generator-input/client-post-processing/update-readme-with-pycharm-workaround.yaml b/generator-input/client-post-processing/update-readme-with-pycharm-workaround.yaml new file mode 100644 index 000000000000..c64cae64c268 --- /dev/null +++ b/generator-input/client-post-processing/update-readme-with-pycharm-workaround.yaml @@ -0,0 +1,41 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +description: Update README to provide a workaround for PyCharm users +url: https://github.com/googleapis/gapic-generator-python/issues/1252 +replacements: + - paths: [ + packages/google-cloud-compute/README.rst + ] + before: | + .. _`venv`: https://docs.python.org/3/library/venv.html + + + Code samples and snippets + ~~~~~~~~~~~~~~~~~~~~~~~~~ + after: | + .. _`venv`: https://docs.python.org/3/library/venv.html + + PyCharm/JetBrains IDEs + ~~~~~~~~~~~~~~~~~~~~~~ + This library has now grown in size past the `JetBrains default size limit of ~2.5Mb`_. + As a result, code completion in JetBrains products can fail to work with the classes from our library. To + fix this, you need to update the ``idea.max.intellisense.filesize`` setting in custom properties + (Help -> Edit custom properties...). Just add the line ``idea.max.intellisense.filesize = 10000`` to change this + limit to ~10Mb. + + .. _JetBrains default size limit of ~2.5Mb: https://www.jetbrains.com/help/pycharm/file-idea-properties.html + + Code samples and snippets + ~~~~~~~~~~~~~~~~~~~~~~~~~ + count: 1 diff --git a/generator-input/pipeline-config.json b/generator-input/pipeline-config.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/generator-input/pipeline-config.json @@ -0,0 +1 @@ +{} diff --git a/generator-input/pipeline-state.json b/generator-input/pipeline-state.json new file mode 100644 index 000000000000..0bf0aafd5b45 --- /dev/null +++ b/generator-input/pipeline-state.json @@ -0,0 +1,2976 @@ +{ + "commonLibrarySourcePaths": [], + "ignoredApiPaths": [ + "google/cloud/bigquery/storage/v1alpha", + "google/cloud/bigquery/storage/v1beta", + "google/cloud/confidentialcomputing/v1alpha1" + ], + "imageTag": "latest", + "libraries": [ + { + "id": "google-cloud-edgenetwork", + "currentVersion": "0.1.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/edgenetwork/v1" + ], + "sourcePaths": [ + "packages/google-cloud-edgenetwork" + ] + }, + { + "id": "google-cloud-configdelivery", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/configdelivery/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-configdelivery" + ] + }, + { + "id": "google-cloud-video-live-stream", + "currentVersion": "1.12.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/video/livestream/v1" + ], + "sourcePaths": [ + "packages/google-cloud-video-live-stream" + ] + }, + { + "id": "google-cloud-media-translation", + "currentVersion": "0.11.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/mediatranslation/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-media-translation" + ] + }, + { + "id": "google-cloud-orchestration-airflow", + "currentVersion": "1.17.5", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/orchestration/airflow/service/v1beta1", + "google/cloud/orchestration/airflow/service/v1" + ], + "sourcePaths": [ + "packages/google-cloud-orchestration-airflow" + ] + }, + { + "id": "google-cloud-workflows", + "currentVersion": "1.18.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/workflows/executions/v1", + "google/cloud/workflows/executions/v1beta", + "google/cloud/workflows/v1", + "google/cloud/workflows/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-workflows" + ] + }, + { + "id": "google-cloud-source-context", + "currentVersion": "1.7.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/devtools/source/v1" + ], + "sourcePaths": [ + "packages/google-cloud-source-context" + ] + }, + { + "id": "google-cloud-retail", + "currentVersion": "2.2.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/retail/v2alpha", + "google/cloud/retail/v2", + "google/cloud/retail/v2beta" + ], + "sourcePaths": [ + "packages/google-cloud-retail" + ] + }, + { + "id": "google-cloud-edgecontainer", + "currentVersion": "0.5.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/edgecontainer/v1" + ], + "sourcePaths": [ + "packages/google-cloud-edgecontainer" + ] + }, + { + "id": "google-maps-mapsplatformdatasets", + "currentVersion": "0.4.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/mapsplatformdatasets/v1" + ], + "sourcePaths": [ + "packages/google-maps-mapsplatformdatasets" + ] + }, + { + "id": "google-cloud-optimization", + "currentVersion": "1.11.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/optimization/v1" + ], + "sourcePaths": [ + "packages/google-cloud-optimization" + ] + }, + { + "id": "google-cloud-appengine-admin", + "currentVersion": "1.14.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/appengine/v1" + ], + "sourcePaths": [ + "packages/google-cloud-appengine-admin" + ] + }, + { + "id": "google-cloud-config", + "currentVersion": "0.1.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/config/v1" + ], + "sourcePaths": [ + "packages/google-cloud-config" + ] + }, + { + "id": "google-cloud-functions", + "currentVersion": "1.20.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/functions/v2", + "google/cloud/functions/v1" + ], + "sourcePaths": [ + "packages/google-cloud-functions" + ] + }, + { + "id": "google-cloud-deploy", + "currentVersion": "2.7.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/deploy/v1" + ], + "sourcePaths": [ + "packages/google-cloud-deploy" + ] + }, + { + "id": "google-cloud-os-login", + "currentVersion": "2.17.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/oslogin/v1", + "google/cloud/oslogin/common" + ], + "sourcePaths": [ + "packages/google-cloud-os-login" + ] + }, + { + "id": "google-cloud-storagebatchoperations", + "currentVersion": "0.1.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/storagebatchoperations/v1" + ], + "sourcePaths": [ + "packages/google-cloud-storagebatchoperations" + ] + }, + { + "id": "google-cloud-vmwareengine", + "currentVersion": "1.8.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/vmwareengine/v1" + ], + "sourcePaths": [ + "packages/google-cloud-vmwareengine" + ] + }, + { + "id": "google-cloud-securitycentermanagement", + "currentVersion": "0.1.22", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/securitycentermanagement/v1" + ], + "sourcePaths": [ + "packages/google-cloud-securitycentermanagement" + ] + }, + { + "id": "google-cloud-confidentialcomputing", + "currentVersion": "0.4.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/confidentialcomputing/v1" + ], + "sourcePaths": [ + "packages/google-cloud-confidentialcomputing" + ] + }, + { + "id": "google-cloud-netapp", + "currentVersion": "0.3.23", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/netapp/v1" + ], + "sourcePaths": [ + "packages/google-cloud-netapp" + ] + }, + { + "id": "google-cloud-geminidataanalytics", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/geminidataanalytics/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-geminidataanalytics" + ] + }, + { + "id": "google-cloud-redis", + "currentVersion": "2.18.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/redis/v1", + "google/cloud/redis/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-redis" + ] + }, + { + "id": "google-cloud-appengine-logging", + "currentVersion": "1.6.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/appengine/logging/v1" + ], + "sourcePaths": [ + "packages/google-cloud-appengine-logging" + ] + }, + { + "id": "google-cloud-talent", + "currentVersion": "2.17.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/talent/v4", + "google/cloud/talent/v4beta1" + ], + "sourcePaths": [ + "packages/google-cloud-talent" + ] + }, + { + "id": "google-cloud-service-usage", + "currentVersion": "1.13.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/api/serviceusage/v1" + ], + "sourcePaths": [ + "packages/google-cloud-service-usage" + ] + }, + { + "id": "google-cloud-texttospeech", + "currentVersion": "2.27.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/texttospeech/v1", + "google/cloud/texttospeech/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-texttospeech" + ] + }, + { + "id": "google-cloud-tpu", + "currentVersion": "1.23.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/tpu/v2", + "google/cloud/tpu/v1", + "google/cloud/tpu/v2alpha1" + ], + "sourcePaths": [ + "packages/google-cloud-tpu" + ] + }, + { + "id": "google-cloud-iap", + "currentVersion": "1.17.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/iap/v1" + ], + "sourcePaths": [ + "packages/google-cloud-iap" + ] + }, + { + "id": "google-cloud-chronicle", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/chronicle/v1" + ], + "sourcePaths": [ + "packages/google-cloud-chronicle" + ] + }, + { + "id": "google-geo-type", + "currentVersion": "0.3.13", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/geo/type" + ], + "sourcePaths": [ + "packages/google-geo-type" + ] + }, + { + "id": "google-cloud-datacatalog", + "currentVersion": "3.27.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/datacatalog/v1", + "google/cloud/datacatalog/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-datacatalog" + ] + }, + { + "id": "google-cloud-recaptcha-enterprise", + "currentVersion": "1.28.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/recaptchaenterprise/v1" + ], + "sourcePaths": [ + "packages/google-cloud-recaptcha-enterprise" + ] + }, + { + "id": "google-cloud-binary-authorization", + "currentVersion": "1.13.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/binaryauthorization/v1", + "google/cloud/binaryauthorization/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-binary-authorization" + ] + }, + { + "id": "google-cloud-shell", + "currentVersion": "1.12.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/shell/v1" + ], + "sourcePaths": [ + "packages/google-cloud-shell" + ] + }, + { + "id": "google-cloud-vision", + "currentVersion": "3.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/vision/v1p3beta1", + "google/cloud/vision/v1p4beta1", + "google/cloud/vision/v1", + "google/cloud/vision/v1p2beta1", + "google/cloud/vision/v1p1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-vision" + ] + }, + { + "id": "google-cloud-video-transcoder", + "currentVersion": "1.15.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/video/transcoder/v1" + ], + "sourcePaths": [ + "packages/google-cloud-video-transcoder" + ] + }, + { + "id": "google-cloud-managed-identities", + "currentVersion": "1.12.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/managedidentities/v1" + ], + "sourcePaths": [ + "packages/google-cloud-managed-identities" + ] + }, + { + "id": "google-cloud-artifact-registry", + "currentVersion": "1.16.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/devtools/artifactregistry/v1", + "google/devtools/artifactregistry/v1beta2" + ], + "sourcePaths": [ + "packages/google-cloud-artifact-registry" + ] + }, + { + "id": "google-maps-fleetengine", + "currentVersion": "0.2.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "maps/fleetengine/v1" + ], + "sourcePaths": [ + "packages/google-maps-fleetengine" + ] + }, + { + "id": "google-analytics-admin", + "currentVersion": "0.24.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/analytics/admin/v1beta", + "google/analytics/admin/v1alpha" + ], + "sourcePaths": [ + "packages/google-analytics-admin" + ] + }, + { + "id": "googleapis-common-protos", + "currentVersion": "1.70.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [], + "sourcePaths": [ + "packages/googleapis-common-protos" + ] + }, + { + "id": "google-cloud-secret-manager", + "currentVersion": "2.24.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/secretmanager/v1", + "google/cloud/secretmanager/v1beta2", + "google/cloud/secrets/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-secret-manager" + ] + }, + { + "id": "google-shopping-merchant-issueresolution", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/issueresolution/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-issueresolution" + ] + }, + { + "id": "google-cloud-beyondcorp-appconnectors", + "currentVersion": "0.4.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/beyondcorp/appconnectors/v1" + ], + "sourcePaths": [ + "packages/google-cloud-beyondcorp-appconnectors" + ] + }, + { + "id": "google-cloud-websecurityscanner", + "currentVersion": "1.17.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/websecurityscanner/v1", + "google/cloud/websecurityscanner/v1beta", + "google/cloud/websecurityscanner/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-websecurityscanner" + ] + }, + { + "id": "google-cloud-monitoring", + "currentVersion": "2.27.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/monitoring/v3" + ], + "sourcePaths": [ + "packages/google-cloud-monitoring" + ] + }, + { + "id": "google-cloud-privilegedaccessmanager", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/privilegedaccessmanager/v1" + ], + "sourcePaths": [ + "packages/google-cloud-privilegedaccessmanager" + ] + }, + { + "id": "google-cloud-container", + "currentVersion": "2.57.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/container/v1", + "google/container/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-container" + ] + }, + { + "id": "google-cloud-dlp", + "currentVersion": "3.31.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/privacy/dlp/v2" + ], + "sourcePaths": [ + "packages/google-cloud-dlp" + ] + }, + { + "id": "google-shopping-merchant-inventories", + "currentVersion": "0.1.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/inventories/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-inventories" + ] + }, + { + "id": "google-cloud-dms", + "currentVersion": "1.12.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/clouddms/v1" + ], + "sourcePaths": [ + "packages/google-cloud-dms" + ] + }, + { + "id": "google-cloud-common", + "currentVersion": "1.5.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/common" + ], + "sourcePaths": [ + "packages/google-cloud-common" + ] + }, + { + "id": "google-cloud-devicestreaming", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/devicestreaming/v1" + ], + "sourcePaths": [ + "packages/google-cloud-devicestreaming" + ] + }, + { + "id": "google-cloud-policysimulator", + "currentVersion": "0.1.14", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/policysimulator/v1" + ], + "sourcePaths": [ + "packages/google-cloud-policysimulator" + ] + }, + { + "id": "google-shopping-merchant-lfp", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/lfp/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-lfp" + ] + }, + { + "id": "google-cloud-apigee-registry", + "currentVersion": "0.6.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/apigeeregistry/v1" + ], + "sourcePaths": [ + "packages/google-cloud-apigee-registry" + ] + }, + { + "id": "google-shopping-merchant-reports", + "currentVersion": "0.1.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/reports/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-reports" + ] + }, + { + "id": "google-cloud-asset", + "currentVersion": "3.30.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/asset/v1p5beta1", + "google/cloud/asset/v1", + "google/cloud/asset/v1p4beta1", + "google/cloud/asset/v1p1beta1", + "google/cloud/asset/v1p2beta1" + ], + "sourcePaths": [ + "packages/google-cloud-asset" + ] + }, + { + "id": "google-cloud-essential-contacts", + "currentVersion": "1.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/essentialcontacts/v1" + ], + "sourcePaths": [ + "packages/google-cloud-essential-contacts" + ] + }, + { + "id": "google-cloud-containeranalysis", + "currentVersion": "2.18.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/devtools/containeranalysis/v1" + ], + "sourcePaths": [ + "packages/google-cloud-containeranalysis" + ] + }, + { + "id": "google-cloud-vm-migration", + "currentVersion": "1.11.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/vmmigration/v1" + ], + "sourcePaths": [ + "packages/google-cloud-vm-migration" + ] + }, + { + "id": "google-cloud-access-context-manager", + "currentVersion": "0.2.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [], + "sourcePaths": [ + "packages/google-cloud-access-context-manager" + ] + }, + { + "id": "google-cloud-securitycenter", + "currentVersion": "1.38.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/securitycenter/v1p1beta1", + "google/cloud/securitycenter/v1", + "google/cloud/securitycenter/v2", + "google/cloud/securitycenter/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-securitycenter" + ] + }, + { + "id": "google-cloud-dialogflow-cx", + "currentVersion": "1.41.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dialogflow/cx/v3beta1", + "google/cloud/dialogflow/cx/v3" + ], + "sourcePaths": [ + "packages/google-cloud-dialogflow-cx" + ] + }, + { + "id": "google-cloud-tasks", + "currentVersion": "2.19.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/tasks/v2beta3", + "google/cloud/tasks/v2beta2", + "google/cloud/tasks/v2" + ], + "sourcePaths": [ + "packages/google-cloud-tasks" + ] + }, + { + "id": "google-cloud-storage-transfer", + "currentVersion": "1.17.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/storagetransfer/v1" + ], + "sourcePaths": [ + "packages/google-cloud-storage-transfer" + ] + }, + { + "id": "google-cloud-service-control", + "currentVersion": "1.15.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/api/servicecontrol/v1", + "google/api/servicecontrol/v2" + ], + "sourcePaths": [ + "packages/google-cloud-service-control" + ] + }, + { + "id": "google-cloud-alloydb", + "currentVersion": "0.4.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/alloydb/v1beta", + "google/cloud/alloydb/v1", + "google/cloud/alloydb/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-alloydb" + ] + }, + { + "id": "google-cloud-parallelstore", + "currentVersion": "0.2.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/parallelstore/v1", + "google/cloud/parallelstore/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-parallelstore" + ] + }, + { + "id": "google-cloud-dataproc", + "currentVersion": "5.20.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dataproc/v1" + ], + "sourcePaths": [ + "packages/google-cloud-dataproc" + ] + }, + { + "id": "google-cloud-monitoring-metrics-scopes", + "currentVersion": "1.9.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/monitoring/metricsscope/v1" + ], + "sourcePaths": [ + "packages/google-cloud-monitoring-metrics-scopes" + ] + }, + { + "id": "google-cloud-kms", + "currentVersion": "3.5.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/kms/v1" + ], + "sourcePaths": [ + "packages/google-cloud-kms" + ] + }, + { + "id": "google-shopping-merchant-productstudio", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/productstudio/v1alpha" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-productstudio" + ] + }, + { + "id": "google-apps-meet", + "currentVersion": "0.1.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/apps/meet/v2beta", + "google/apps/meet/v2" + ], + "sourcePaths": [ + "packages/google-apps-meet" + ] + }, + { + "id": "google-shopping-merchant-datasources", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/datasources/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-datasources" + ] + }, + { + "id": "google-shopping-css", + "currentVersion": "0.1.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/css/v1" + ], + "sourcePaths": [ + "packages/google-shopping-css" + ] + }, + { + "id": "google-cloud-billing", + "currentVersion": "1.16.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/billing/v1" + ], + "sourcePaths": [ + "packages/google-cloud-billing" + ] + }, + { + "id": "google-area120-tables", + "currentVersion": "0.11.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/area120/tables/v1alpha1" + ], + "sourcePaths": [ + "packages/google-area120-tables" + ] + }, + { + "id": "google-cloud-org-policy", + "currentVersion": "1.14.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/orgpolicy/v2" + ], + "sourcePaths": [ + "packages/google-cloud-org-policy" + ] + }, + { + "id": "google-cloud-memorystore", + "currentVersion": "0.1.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/memorystore/v1", + "google/cloud/memorystore/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-memorystore" + ] + }, + { + "id": "google-shopping-merchant-products", + "currentVersion": "0.2.5", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/products/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-products" + ] + }, + { + "id": "google-analytics-data", + "currentVersion": "0.18.19", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/analytics/data/v1alpha", + "google/analytics/data/v1beta" + ], + "sourcePaths": [ + "packages/google-analytics-data" + ] + }, + { + "id": "google-cloud-private-catalog", + "currentVersion": "0.9.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/privatecatalog/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-private-catalog" + ] + }, + { + "id": "google-cloud-policy-troubleshooter", + "currentVersion": "1.13.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/policytroubleshooter/v1" + ], + "sourcePaths": [ + "packages/google-cloud-policy-troubleshooter" + ] + }, + { + "id": "google-cloud-scheduler", + "currentVersion": "2.16.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/scheduler/v1", + "google/cloud/scheduler/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-scheduler" + ] + }, + { + "id": "google-cloud-automl", + "currentVersion": "2.16.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/automl/v1beta1", + "google/cloud/automl/v1" + ], + "sourcePaths": [ + "packages/google-cloud-automl" + ] + }, + { + "id": "google-cloud-audit-log", + "currentVersion": "0.3.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [], + "sourcePaths": [ + "packages/google-cloud-audit-log" + ] + }, + { + "id": "google-cloud-bigquery-biglake", + "currentVersion": "0.4.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/biglake/v1alpha1", + "google/cloud/bigquery/biglake/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-biglake" + ] + }, + { + "id": "google-cloud-kms-inventory", + "currentVersion": "0.2.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/kms/inventory/v1" + ], + "sourcePaths": [ + "packages/google-cloud-kms-inventory" + ] + }, + { + "id": "google-maps-addressvalidation", + "currentVersion": "0.3.19", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/addressvalidation/v1" + ], + "sourcePaths": [ + "packages/google-maps-addressvalidation" + ] + }, + { + "id": "google-cloud-bigquery-logging", + "currentVersion": "1.6.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/logging/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-logging" + ] + }, + { + "id": "google-cloud-gdchardwaremanagement", + "currentVersion": "0.1.12", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gdchardwaremanagement/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-gdchardwaremanagement" + ] + }, + { + "id": "google-cloud-visionai", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/visionai/v1alpha1", + "google/cloud/visionai/v1" + ], + "sourcePaths": [ + "packages/google-cloud-visionai" + ] + }, + { + "id": "google-cloud-datastream", + "currentVersion": "1.14.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/datastream/v1", + "google/cloud/datastream/v1alpha1" + ], + "sourcePaths": [ + "packages/google-cloud-datastream" + ] + }, + { + "id": "google-cloud-eventarc", + "currentVersion": "1.15.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/eventarc/v1" + ], + "sourcePaths": [ + "packages/google-cloud-eventarc" + ] + }, + { + "id": "google-cloud-workstations", + "currentVersion": "0.5.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/workstations/v1", + "google/cloud/workstations/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-workstations" + ] + }, + { + "id": "google-cloud-bigquery-reservation", + "currentVersion": "1.17.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/reservation/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-reservation" + ] + }, + { + "id": "google-cloud-webrisk", + "currentVersion": "1.18.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/webrisk/v1", + "google/cloud/webrisk/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-webrisk" + ] + }, + { + "id": "google-cloud-oracledatabase", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/oracledatabase/v1" + ], + "sourcePaths": [ + "packages/google-cloud-oracledatabase" + ] + }, + { + "id": "google-cloud-bigquery-connection", + "currentVersion": "1.18.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/connection/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-connection" + ] + }, + { + "id": "google-cloud-dialogflow", + "currentVersion": "2.41.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dialogflow/v2beta1", + "google/cloud/dialogflow/v2" + ], + "sourcePaths": [ + "packages/google-cloud-dialogflow" + ] + }, + { + "id": "google-shopping-merchant-ordertracking", + "currentVersion": "0.1.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/ordertracking/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-ordertracking" + ] + }, + { + "id": "google-cloud-contact-center-insights", + "currentVersion": "1.23.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/contactcenterinsights/v1" + ], + "sourcePaths": [ + "packages/google-cloud-contact-center-insights" + ] + }, + { + "id": "google-cloud-developerconnect", + "currentVersion": "0.1.9", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/developerconnect/v1" + ], + "sourcePaths": [ + "packages/google-cloud-developerconnect" + ] + }, + { + "id": "google-cloud-gke-multicloud", + "currentVersion": "0.6.21", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gkemulticloud/v1" + ], + "sourcePaths": [ + "packages/google-cloud-gke-multicloud" + ] + }, + { + "id": "google-cloud-access-approval", + "currentVersion": "1.16.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/accessapproval/v1" + ], + "sourcePaths": [ + "packages/google-cloud-access-approval" + ] + }, + { + "id": "google-cloud-vpc-access", + "currentVersion": "1.13.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/vpcaccess/v1" + ], + "sourcePaths": [ + "packages/google-cloud-vpc-access" + ] + }, + { + "id": "google-cloud-bigquery-datatransfer", + "currentVersion": "3.19.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/datatransfer/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-datatransfer" + ] + }, + { + "id": "google-cloud-servicehealth", + "currentVersion": "0.1.12", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/servicehealth/v1" + ], + "sourcePaths": [ + "packages/google-cloud-servicehealth" + ] + }, + { + "id": "google-cloud-apphub", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/apphub/v1" + ], + "sourcePaths": [ + "packages/google-cloud-apphub" + ] + }, + { + "id": "google-maps-solar", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/solar/v1" + ], + "sourcePaths": [ + "packages/google-maps-solar" + ] + }, + { + "id": "grafeas", + "currentVersion": "1.15.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "grafeas/v1" + ], + "sourcePaths": [ + "packages/grafeas" + ] + }, + { + "id": "google-cloud-bigquery-data-exchange", + "currentVersion": "0.5.20", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/dataexchange/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-data-exchange" + ] + }, + { + "id": "google-cloud-phishing-protection", + "currentVersion": "1.14.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/phishingprotection/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-phishing-protection" + ] + }, + { + "id": "google-cloud-parametermanager", + "currentVersion": "0.1.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/parametermanager/v1" + ], + "sourcePaths": [ + "packages/google-cloud-parametermanager" + ] + }, + { + "id": "google-cloud-eventarc-publishing", + "currentVersion": "0.6.19", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/eventarc/publishing/v1" + ], + "sourcePaths": [ + "packages/google-cloud-eventarc-publishing" + ] + }, + { + "id": "google-cloud-discoveryengine", + "currentVersion": "0.13.9", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/discoveryengine/v1", + "google/cloud/discoveryengine/v1beta", + "google/cloud/discoveryengine/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-discoveryengine" + ] + }, + { + "id": "google-cloud-private-ca", + "currentVersion": "1.14.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/security/privateca/v1beta1", + "google/cloud/security/privateca/v1" + ], + "sourcePaths": [ + "packages/google-cloud-private-ca" + ] + }, + { + "id": "google-cloud-datalabeling", + "currentVersion": "1.13.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/datalabeling/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-datalabeling" + ] + }, + { + "id": "google-cloud-support", + "currentVersion": "0.1.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/support/v2", + "google/cloud/support/v2beta" + ], + "sourcePaths": [ + "packages/google-cloud-support" + ] + }, + { + "id": "google-cloud-storage-control", + "currentVersion": "1.5.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/storage/control/v2" + ], + "sourcePaths": [ + "packages/google-cloud-storage-control" + ] + }, + { + "id": "google-cloud-alloydb-connectors", + "currentVersion": "0.1.10", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/alloydb/connectors/v1", + "google/cloud/alloydb/connectors/v1alpha", + "google/cloud/alloydb/connectors/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-alloydb-connectors" + ] + }, + { + "id": "google-cloud-quotas", + "currentVersion": "0.1.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/api/cloudquotas/v1beta", + "google/api/cloudquotas/v1" + ], + "sourcePaths": [ + "packages/google-cloud-quotas" + ] + }, + { + "id": "google-maps-routeoptimization", + "currentVersion": "0.1.11", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/routeoptimization/v1" + ], + "sourcePaths": [ + "packages/google-maps-routeoptimization" + ] + }, + { + "id": "google-cloud-modelarmor", + "currentVersion": "0.2.5", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/modelarmor/v1", + "google/cloud/modelarmor/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-modelarmor" + ] + }, + { + "id": "google-cloud-recommendations-ai", + "currentVersion": "0.10.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/recommendationengine/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-recommendations-ai" + ] + }, + { + "id": "google-maps-areainsights", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/areainsights/v1" + ], + "sourcePaths": [ + "packages/google-maps-areainsights" + ] + }, + { + "id": "google-cloud-videointelligence", + "currentVersion": "2.16.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/videointelligence/v1p2beta1", + "google/cloud/videointelligence/v1p3beta1", + "google/cloud/videointelligence/v1beta2", + "google/cloud/videointelligence/v1", + "google/cloud/videointelligence/v1p1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-videointelligence" + ] + }, + { + "id": "google-cloud-data-fusion", + "currentVersion": "1.13.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/datafusion/v1" + ], + "sourcePaths": [ + "packages/google-cloud-data-fusion" + ] + }, + { + "id": "google-cloud-gke-backup", + "currentVersion": "0.5.19", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gkebackup/v1" + ], + "sourcePaths": [ + "packages/google-cloud-gke-backup" + ] + }, + { + "id": "google-cloud-advisorynotifications", + "currentVersion": "0.3.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/advisorynotifications/v1" + ], + "sourcePaths": [ + "packages/google-cloud-advisorynotifications" + ] + }, + { + "id": "google-cloud-storageinsights", + "currentVersion": "0.1.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/storageinsights/v1" + ], + "sourcePaths": [ + "packages/google-cloud-storageinsights" + ] + }, + { + "id": "grpc-google-iam-v1", + "currentVersion": "0.14.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [], + "sourcePaths": [ + "packages/grpc-google-iam-v1" + ] + }, + { + "id": "google-cloud-dataform", + "currentVersion": "0.6.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dataform/v1beta1", + "google/cloud/dataform/v1" + ], + "sourcePaths": [ + "packages/google-cloud-dataform" + ] + }, + { + "id": "google-cloud-apihub", + "currentVersion": "0.2.6", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/apihub/v1" + ], + "sourcePaths": [ + "packages/google-cloud-apihub" + ] + }, + { + "id": "google-cloud-gsuiteaddons", + "currentVersion": "0.3.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gsuiteaddons/v1" + ], + "sourcePaths": [ + "packages/google-cloud-gsuiteaddons" + ] + }, + { + "id": "google-cloud-domains", + "currentVersion": "1.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/domains/v1beta1", + "google/cloud/domains/v1" + ], + "sourcePaths": [ + "packages/google-cloud-domains" + ] + }, + { + "id": "google-cloud-cloudcontrolspartner", + "currentVersion": "0.2.7", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/cloudcontrolspartner/v1beta", + "google/cloud/cloudcontrolspartner/v1" + ], + "sourcePaths": [ + "packages/google-cloud-cloudcontrolspartner" + ] + }, + { + "id": "google-cloud-datacatalog-lineage", + "currentVersion": "0.3.14", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/datacatalog/lineage/v1" + ], + "sourcePaths": [ + "packages/google-cloud-datacatalog-lineage" + ] + }, + { + "id": "google-cloud-securesourcemanager", + "currentVersion": "0.1.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/securesourcemanager/v1" + ], + "sourcePaths": [ + "packages/google-cloud-securesourcemanager" + ] + }, + { + "id": "google-cloud-assured-workloads", + "currentVersion": "1.15.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/assuredworkloads/v1", + "google/cloud/assuredworkloads/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-assured-workloads" + ] + }, + { + "id": "google-maps-routing", + "currentVersion": "0.6.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/routing/v2" + ], + "sourcePaths": [ + "packages/google-maps-routing" + ] + }, + { + "id": "google-maps-places", + "currentVersion": "0.2.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/maps/places/v1" + ], + "sourcePaths": [ + "packages/google-maps-places" + ] + }, + { + "id": "google-apps-chat", + "currentVersion": "0.2.6", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/chat/v1" + ], + "sourcePaths": [ + "packages/google-apps-chat" + ] + }, + { + "id": "google-cloud-translate", + "currentVersion": "3.20.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/translation/v3", + "google/cloud/translation/v3beta1" + ], + "sourcePaths": [ + "packages/google-cloud-translate" + ] + }, + { + "id": "google-cloud-network-connectivity", + "currentVersion": "2.8.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/networkconnectivity/v1alpha1", + "google/cloud/networkconnectivity/v1" + ], + "sourcePaths": [ + "packages/google-cloud-network-connectivity" + ] + }, + { + "id": "google-apps-events-subscriptions", + "currentVersion": "0.2.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/apps/events/subscriptions/v1", + "google/apps/events/subscriptions/v1beta" + ], + "sourcePaths": [ + "packages/google-apps-events-subscriptions" + ] + }, + { + "id": "google-cloud-resource-manager", + "currentVersion": "1.14.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/resourcemanager/v3" + ], + "sourcePaths": [ + "packages/google-cloud-resource-manager" + ] + }, + { + "id": "google-shopping-merchant-reviews", + "currentVersion": "0.1.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/reviews/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-reviews" + ] + }, + { + "id": "google-cloud-build", + "currentVersion": "3.31.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/devtools/cloudbuild/v1", + "google/devtools/cloudbuild/v2" + ], + "sourcePaths": [ + "packages/google-cloud-build" + ] + }, + { + "id": "google-cloud-channel", + "currentVersion": "1.23.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/channel/v1" + ], + "sourcePaths": [ + "packages/google-cloud-channel" + ] + }, + { + "id": "google-cloud-documentai", + "currentVersion": "3.5.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/documentai/v1beta3", + "google/cloud/documentai/v1" + ], + "sourcePaths": [ + "packages/google-cloud-documentai" + ] + }, + { + "id": "google-cloud-backupdr", + "currentVersion": "0.2.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/backupdr/v1" + ], + "sourcePaths": [ + "packages/google-cloud-backupdr" + ] + }, + { + "id": "google-cloud-life-sciences", + "currentVersion": "0.9.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/lifesciences/v2beta" + ], + "sourcePaths": [ + "packages/google-cloud-life-sciences" + ] + }, + { + "id": "google-cloud-managedkafka", + "currentVersion": "0.1.11", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/managedkafka/v1" + ], + "sourcePaths": [ + "packages/google-cloud-managedkafka" + ] + }, + { + "id": "google-cloud-public-ca", + "currentVersion": "0.3.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/security/publicca/v1", + "google/cloud/security/publicca/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-public-ca" + ] + }, + { + "id": "google-cloud-iam", + "currentVersion": "2.19.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/iam/v3", + "google/iam/v3beta", + "google/iam/admin/v1", + "google/iam/v2", + "google/iam/credentials/v1", + "google/iam/v2beta" + ], + "sourcePaths": [ + "packages/google-cloud-iam" + ] + }, + { + "id": "google-cloud-api-gateway", + "currentVersion": "1.12.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/apigateway/v1" + ], + "sourcePaths": [ + "packages/google-cloud-api-gateway" + ] + }, + { + "id": "google-cloud-monitoring-dashboards", + "currentVersion": "2.18.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/monitoring/dashboard/v1" + ], + "sourcePaths": [ + "packages/google-cloud-monitoring-dashboards" + ] + }, + { + "id": "google-shopping-merchant-promotions", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/promotions/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-promotions" + ] + }, + { + "id": "google-shopping-merchant-notifications", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/notifications/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-notifications" + ] + }, + { + "id": "google-cloud-os-config", + "currentVersion": "1.20.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/osconfig/v1alpha", + "google/cloud/osconfig/v1" + ], + "sourcePaths": [ + "packages/google-cloud-os-config" + ] + }, + { + "id": "google-cloud-compute", + "currentVersion": "1.31.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/compute/v1" + ], + "sourcePaths": [ + "packages/google-cloud-compute" + ] + }, + { + "id": "google-cloud-telcoautomation", + "currentVersion": "0.2.11", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/telcoautomation/v1alpha1", + "google/cloud/telcoautomation/v1" + ], + "sourcePaths": [ + "packages/google-cloud-telcoautomation" + ] + }, + { + "id": "google-cloud-beyondcorp-appgateways", + "currentVersion": "0.4.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/beyondcorp/appgateways/v1" + ], + "sourcePaths": [ + "packages/google-cloud-beyondcorp-appgateways" + ] + }, + { + "id": "google-cloud-iam-logging", + "currentVersion": "1.4.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/iam/v1/logging" + ], + "sourcePaths": [ + "packages/google-cloud-iam-logging" + ] + }, + { + "id": "google-cloud-network-security", + "currentVersion": "0.9.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/networksecurity/v1beta1", + "google/cloud/networksecurity/v1" + ], + "sourcePaths": [ + "packages/google-cloud-network-security" + ] + }, + { + "id": "google-ads-marketingplatform-admin", + "currentVersion": "0.1.6", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/marketingplatform/admin/v1alpha" + ], + "sourcePaths": [ + "packages/google-ads-marketingplatform-admin" + ] + }, + { + "id": "google-cloud-contentwarehouse", + "currentVersion": "0.7.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/contentwarehouse/v1" + ], + "sourcePaths": [ + "packages/google-cloud-contentwarehouse" + ] + }, + { + "id": "google-cloud-api-keys", + "currentVersion": "0.5.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/api/apikeys/v2" + ], + "sourcePaths": [ + "packages/google-cloud-api-keys" + ] + }, + { + "id": "google-shopping-merchant-quota", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/quota/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-quota" + ] + }, + { + "id": "google-cloud-run", + "currentVersion": "0.10.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/run/v2" + ], + "sourcePaths": [ + "packages/google-cloud-run" + ] + }, + { + "id": "google-cloud-bare-metal-solution", + "currentVersion": "1.10.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/baremetalsolution/v2" + ], + "sourcePaths": [ + "packages/google-cloud-bare-metal-solution" + ] + }, + { + "id": "google-cloud-bigquery-migration", + "currentVersion": "0.11.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/migration/v2alpha", + "google/cloud/bigquery/migration/v2" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-migration" + ] + }, + { + "id": "google-cloud-speech", + "currentVersion": "2.33.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/speech/v1p1beta1", + "google/cloud/speech/v1", + "google/cloud/speech/v2" + ], + "sourcePaths": [ + "packages/google-cloud-speech" + ] + }, + { + "id": "google-shopping-merchant-conversions", + "currentVersion": "0.1.9", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/conversions/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-conversions" + ] + }, + { + "id": "google-cloud-bigquery-analyticshub", + "currentVersion": "0.4.19", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/analyticshub/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-analyticshub" + ] + }, + { + "id": "google-cloud-enterpriseknowledgegraph", + "currentVersion": "0.3.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/enterpriseknowledgegraph/v1" + ], + "sourcePaths": [ + "packages/google-cloud-enterpriseknowledgegraph" + ] + }, + { + "id": "google-cloud-beyondcorp-appconnections", + "currentVersion": "0.4.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/beyondcorp/appconnections/v1" + ], + "sourcePaths": [ + "packages/google-cloud-beyondcorp-appconnections" + ] + }, + { + "id": "google-cloud-memcache", + "currentVersion": "1.12.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/memcache/v1", + "google/cloud/memcache/v1beta2" + ], + "sourcePaths": [ + "packages/google-cloud-memcache" + ] + }, + { + "id": "google-cloud-dataflow-client", + "currentVersion": "0.9.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/dataflow/v1beta3" + ], + "sourcePaths": [ + "packages/google-cloud-dataflow-client" + ] + }, + { + "id": "google-cloud-certificate-manager", + "currentVersion": "1.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/certificatemanager/v1" + ], + "sourcePaths": [ + "packages/google-cloud-certificate-manager" + ] + }, + { + "id": "google-apps-card", + "currentVersion": "0.1.8", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/apps/card/v1" + ], + "sourcePaths": [ + "packages/google-apps-card" + ] + }, + { + "id": "google-cloud-video-stitcher", + "currentVersion": "0.7.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/video/stitcher/v1" + ], + "sourcePaths": [ + "packages/google-cloud-video-stitcher" + ] + }, + { + "id": "google-cloud-redis-cluster", + "currentVersion": "0.1.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/redis/cluster/v1", + "google/cloud/redis/cluster/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-redis-cluster" + ] + }, + { + "id": "google-cloud-migrationcenter", + "currentVersion": "0.1.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/migrationcenter/v1" + ], + "sourcePaths": [ + "packages/google-cloud-migrationcenter" + ] + }, + { + "id": "google-cloud-rapidmigrationassessment", + "currentVersion": "0.1.16", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/rapidmigrationassessment/v1" + ], + "sourcePaths": [ + "packages/google-cloud-rapidmigrationassessment" + ] + }, + { + "id": "google-ads-admanager", + "currentVersion": "0.2.6", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/ads/admanager/v1" + ], + "sourcePaths": [ + "packages/google-ads-admanager" + ] + }, + { + "id": "google-cloud-network-services", + "currentVersion": "0.5.22", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/networkservices/v1" + ], + "sourcePaths": [ + "packages/google-cloud-network-services" + ] + }, + { + "id": "google-shopping-type", + "currentVersion": "0.1.12", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/type" + ], + "sourcePaths": [ + "packages/google-shopping-type" + ] + }, + { + "id": "google-cloud-gke-connect-gateway", + "currentVersion": "0.10.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gkeconnect/gateway/v1beta1", + "google/cloud/gkeconnect/gateway/v1" + ], + "sourcePaths": [ + "packages/google-cloud-gke-connect-gateway" + ] + }, + { + "id": "google-cloud-dataproc-metastore", + "currentVersion": "1.18.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/metastore/v1alpha", + "google/cloud/metastore/v1beta", + "google/cloud/metastore/v1" + ], + "sourcePaths": [ + "packages/google-cloud-dataproc-metastore" + ] + }, + { + "id": "google-cloud-compute-v1beta", + "currentVersion": "0.1.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/compute/v1beta" + ], + "sourcePaths": [ + "packages/google-cloud-compute-v1beta" + ] + }, + { + "id": "google-cloud-dataplex", + "currentVersion": "2.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dataplex/v1" + ], + "sourcePaths": [ + "packages/google-cloud-dataplex" + ] + }, + { + "id": "google-cloud-lustre", + "currentVersion": "0.1.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/lustre/v1" + ], + "sourcePaths": [ + "packages/google-cloud-lustre" + ] + }, + { + "id": "google-cloud-data-qna", + "currentVersion": "0.10.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/dataqna/v1alpha" + ], + "sourcePaths": [ + "packages/google-cloud-data-qna" + ] + }, + { + "id": "google-cloud-beyondcorp-clientgateways", + "currentVersion": "0.4.17", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/beyondcorp/clientgateways/v1" + ], + "sourcePaths": [ + "packages/google-cloud-beyondcorp-clientgateways" + ] + }, + { + "id": "google-cloud-service-management", + "currentVersion": "1.13.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/api/servicemanagement/v1" + ], + "sourcePaths": [ + "packages/google-cloud-service-management" + ] + }, + { + "id": "google-shopping-merchant-accounts", + "currentVersion": "0.3.4", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/shopping/merchant/accounts/v1beta" + ], + "sourcePaths": [ + "packages/google-shopping-merchant-accounts" + ] + }, + { + "id": "google-cloud-bigquery-datapolicies", + "currentVersion": "0.6.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/bigquery/datapolicies/v1beta1", + "google/cloud/bigquery/datapolicies/v1" + ], + "sourcePaths": [ + "packages/google-cloud-bigquery-datapolicies" + ] + }, + { + "id": "google-maps-fleetengine-delivery", + "currentVersion": "0.2.12", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "maps/fleetengine/delivery/v1" + ], + "sourcePaths": [ + "packages/google-maps-fleetengine-delivery" + ] + }, + { + "id": "google-cloud-policytroubleshooter-iam", + "currentVersion": "0.1.13", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/policytroubleshooter/iam/v3" + ], + "sourcePaths": [ + "packages/google-cloud-policytroubleshooter-iam" + ] + }, + { + "id": "google-ai-generativelanguage", + "currentVersion": "0.6.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/ai/generativelanguage/v1", + "google/ai/generativelanguage/v1beta", + "google/ai/generativelanguage/v1beta3", + "google/ai/generativelanguage/v1beta2", + "google/ai/generativelanguage/v1alpha" + ], + "sourcePaths": [ + "packages/google-ai-generativelanguage" + ] + }, + { + "id": "google-cloud-billing-budgets", + "currentVersion": "1.17.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/billing/budgets/v1", + "google/cloud/billing/budgets/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-billing-budgets" + ] + }, + { + "id": "google-cloud-trace", + "currentVersion": "1.16.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/devtools/cloudtrace/v2", + "google/devtools/cloudtrace/v1" + ], + "sourcePaths": [ + "packages/google-cloud-trace" + ] + }, + { + "id": "google-cloud-financialservices", + "currentVersion": "0.1.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/financialservices/v1" + ], + "sourcePaths": [ + "packages/google-cloud-financialservices" + ] + }, + { + "id": "google-cloud-filestore", + "currentVersion": "1.13.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/filestore/v1" + ], + "sourcePaths": [ + "packages/google-cloud-filestore" + ] + }, + { + "id": "google-cloud-language", + "currentVersion": "2.17.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/language/v1beta2", + "google/cloud/language/v2", + "google/cloud/language/v1" + ], + "sourcePaths": [ + "packages/google-cloud-language" + ] + }, + { + "id": "google-cloud-gke-hub", + "currentVersion": "1.17.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/gkehub/v1", + "google/cloud/gkehub/configmanagement/v1", + "google/cloud/gkehub/multiclusteringress/v1", + "google/cloud/gkehub/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-gke-hub" + ] + }, + { + "id": "google-cloud-service-directory", + "currentVersion": "1.14.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/servicedirectory/v1", + "google/cloud/servicedirectory/v1beta1" + ], + "sourcePaths": [ + "packages/google-cloud-service-directory" + ] + }, + { + "id": "google-cloud-batch", + "currentVersion": "0.17.36", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/batch/v1alpha", + "google/cloud/batch/v1" + ], + "sourcePaths": [ + "packages/google-cloud-batch" + ] + }, + { + "id": "google-cloud-apigee-connect", + "currentVersion": "1.12.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/apigeeconnect/v1" + ], + "sourcePaths": [ + "packages/google-cloud-apigee-connect" + ] + }, + { + "id": "google-cloud-commerce-consumer-procurement", + "currentVersion": "0.2.0", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/commerce/consumer/procurement/v1", + "google/cloud/commerce/consumer/procurement/v1alpha1" + ], + "sourcePaths": [ + "packages/google-cloud-commerce-consumer-procurement" + ] + }, + { + "id": "google-apps-script-type", + "currentVersion": "0.3.15", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/apps/script/type", + "google/apps/script/type/gmail", + "google/apps/script/type/docs", + "google/apps/script/type/drive", + "google/apps/script/type/sheets", + "google/apps/script/type/calendar", + "google/apps/script/type/slides" + ], + "sourcePaths": [ + "packages/google-apps-script-type" + ] + }, + { + "id": "google-cloud-ids", + "currentVersion": "1.10.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/ids/v1" + ], + "sourcePaths": [ + "packages/google-cloud-ids" + ] + }, + { + "id": "google-cloud-network-management", + "currentVersion": "1.26.1", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/networkmanagement/v1" + ], + "sourcePaths": [ + "packages/google-cloud-network-management" + ] + }, + { + "id": "google-cloud-recommender", + "currentVersion": "2.18.2", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/recommender/v1beta1", + "google/cloud/recommender/v1" + ], + "sourcePaths": [ + "packages/google-cloud-recommender" + ] + }, + { + "id": "google-cloud-notebooks", + "currentVersion": "1.13.3", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/notebooks/v1beta1", + "google/cloud/notebooks/v1", + "google/cloud/notebooks/v2" + ], + "sourcePaths": [ + "packages/google-cloud-notebooks" + ] + }, + { + "id": "google-cloud-beyondcorp-clientconnectorservices", + "currentVersion": "0.4.18", + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": [ + "google/cloud/beyondcorp/clientconnectorservices/v1" + ], + "sourcePaths": [ + "packages/google-cloud-beyondcorp-clientconnectorservices" + ] + } + ] +} diff --git a/scripts/configure_apis/configure_apis.py b/scripts/configure_apis/configure_apis.py new file mode 100644 index 000000000000..36fd9817a17e --- /dev/null +++ b/scripts/configure_apis/configure_apis.py @@ -0,0 +1,224 @@ +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import json +from pathlib import Path +import re +from typing import List + +SCRIPT_DIR = Path(__file__).resolve().parent +ROOT_DIR = Path(SCRIPT_DIR / ".." / "..").resolve() +GENERATOR_INPUT_DIR = ROOT_DIR / "generator-input" +GOOGLEAPIS_DIR = ROOT_DIR / ".." / "googleapis" +REPO_METADATA_JSON = "repo-metadata.json" +PACKAGES_DIR = ROOT_DIR / "packages" + +def configure_apis_json(apis_dir: List[Path] = GOOGLEAPIS_DIR) -> None: + """ + This method updates the `apis.json` file in the directory + `generator-input`. + + Args: + apis_dir(List[pathlib.Path]): A list of Paths, one for each API + whose entry will be updated in the `apis.json` files. + + Returns: + None + """ + + pipeline_state_json = GENERATOR_INPUT_DIR / "pipeline-state.json" + api_json = GENERATOR_INPUT_DIR / "apis.json" + + with open(pipeline_state_json, "r") as pipeline_state_json_file: + pipeline_state = json.load(pipeline_state_json_file) + + default_versions = {} + reference_doc_includes = {} + default_versions_extended = {} + # For each package in pipeline_state, calculate the default version if necessary + for pipeline_state_entry in pipeline_state["libraries"]: + if len(pipeline_state_entry["apiPaths"]) < 2: + continue + trimmed_apis = [api.split("/v")[0] for api in pipeline_state_entry["apiPaths"]] + trimmed_api_dict = {trimmed_api : trimmed_apis.count(trimmed_api) for trimmed_api in trimmed_apis} + path_of_interest = [i for i in trimmed_api_dict if trimmed_api_dict[i] > 1] + default_version = None + for api_path in pipeline_state_entry["apiPaths"]: + if path_of_interest and path_of_interest[0] + "/v" not in api_path: + continue + # TODO: Move this to the service config + # For this API, determine if we need to explicitly set it to the default version to True or False + # If there is only 1 apiPath, then it is already the default, no need to do anything + # A default should explicitly be set for all apis in apiPaths + if default_version is None: + default_version = api_path + elif 'beta' in api_path and 'alpha' in default_version: + default_version = api_path + elif 'beta' not in api_path and 'alpha' not in api_path: + try: + parsed_version_default = int(default_version.split("/v")[-1]) + except ValueError: + default_version = api_path + parsed_version_default = None + try: + parsed_version_current = int(api_path.split("/v")[-1]) + if parsed_version_default is None or parsed_version_current < parsed_version_default: + default_version = api_path + except ValueError: + pass + + reference_doc_includes_forced = None + default_version_secondary = None + if pipeline_state_entry["id"] == "google-cloud-trace": + default_version = "google/cloud/trace/v2" + elif pipeline_state_entry["id"] == "google-cloud-workflows": + default_version_secondary = "google/cloud/workflows/executions/v1" + default_version = "google/cloud/workflows/v1" + reference_doc_includes_forced = "workflows_v1beta+executions_v1+executions_v1beta" + elif pipeline_state_entry["id"] == "google-ai-generativelanguage": + default_version = "google/ai/generativelanguage/v1beta" + elif pipeline_state_entry["id"] == "google-analytics-admin": + default_version = "google/analytics/admin/v1alpha" + if default_version_secondary: + default_versions_extended[pipeline_state_entry["id"]] = default_version_secondary + + default_versions[pipeline_state_entry["id"]] = default_version + + import os + if not reference_doc_includes_forced: + reference_doc_includes[pipeline_state_entry["id"]] = "+".join([api.replace(os.path.commonprefix(["/".join(default_version.split("/")[:-2]), api]) + "/", "").replace("/", "_") for api in pipeline_state_entry["apiPaths"] if api != default_version]) + else: + reference_doc_includes[pipeline_state_entry["id"]] = reference_doc_includes_forced + + with open(api_json, "r") as apis_json_file: + apis = json.load(apis_json_file) + apis["apis"] = [] + + for individual_api in apis_dir: + api_entry = { + "apiPath": str(individual_api.relative_to(GOOGLEAPIS_DIR.resolve())) + } + + # TODO: Remove dependency on BUILD.bazel + # Move these to the service config + with open(individual_api / "BUILD.bazel", "r") as build_bazel_file: + build_bazel = build_bazel_file.read() + if "py_gapic_library" in build_bazel: + py_gapic_library = re.search( + r"(?s)py_gapic_library\((.*?)\)", build_bazel + ).group(1) + + py_gapic_options = [ + "autogen-snippets", + "python-gapic-name", + "python-gapic-namespace", + "warehouse-package-name", + ] + for gapic_option in py_gapic_options: + if f"{gapic_option}=" in py_gapic_library: + api_entry[gapic_option] = re.search( + fr"(?s){gapic_option}\=(.*?)\"", py_gapic_library + ).group(1) + + if "transport" in py_gapic_library: + api_entry["transport"] = re.search( + r"(?s)\"?transport\s?\=\s?\"?(.*?)\"", py_gapic_library + ).group(1) + + if "service_yaml" in py_gapic_library: + service_yaml_entry = re.search( + r"(?s)service_yaml\s\=\s\"(.*?)\"", py_gapic_library + ).group(1) + # Some APIs have ":" instead of "". + # Remove the leading colon + if "//" not in service_yaml_entry: + api_entry["service-yaml"] = service_yaml_entry.replace(":","") + + if "rest_numeric_enums" in py_gapic_library: + api_entry["rest-numeric-enums"] = re.search( + r"(?s)rest_numeric_enums\s?\=\s?(.*?),", py_gapic_library + ).group(1) + + if ( + "grpc_service_config" in py_gapic_library + and "grpc_service_config = None" not in py_gapic_library + ): + api_entry["retry-config"] = re.search( + r"(?s)grpc_service_config\s\=\s\"(.*?)\"", py_gapic_library + ).group(1) + + # For each corresponding API, find the package entry in pipeline state.json via `apiPaths` + for pipeline_state_entry in pipeline_state["libraries"]: + if api_entry["apiPath"] in pipeline_state_entry["apiPaths"]: + api_entry["id"] = pipeline_state_entry["id"] + api_entry["gapic-version"] = pipeline_state_entry["currentVersion"] + + # TODO: Remove dependency on repo-metadata.json + # Move these to the service config + if "id" in api_entry: + with open(PACKAGES_DIR / api_entry["id"] / ".repo-metadata.json", "r") as repo_metadata_json_file: + repo_metadata = json.load(repo_metadata_json_file) + api_entry["release-level"] = repo_metadata["release_level"] + api_entry["documentation-name"] = repo_metadata["name"] + + # backfill information not in service yaml + if "service-yaml" in api_entry: + with open(individual_api / api_entry["service-yaml"], "r") as service_yaml_file: + service_yaml = service_yaml_file.read() + if "documentation_uri:" not in service_yaml: + api_entry["documentation-uri"] = repo_metadata["product_documentation"] + if "summary:" not in service_yaml and "api_description" in repo_metadata: + api_entry["api-description"] = repo_metadata.get("api_description", repo_metadata.get("name_pretty")) + # if there is no service yaml, backfill as much as possible + else: + api_entry["title"] = repo_metadata.get("name_pretty") + api_entry["documentation-uri"] = repo_metadata.get("product_documentation") + api_entry["api-description"] = repo_metadata.get("api_description", repo_metadata.get("name_pretty")) + + + if api_entry["id"] in default_versions: + if default_versions_extended and api_entry["id"] in default_versions_extended and api_entry["apiPath"].split("/")[:-1] == default_versions_extended[api_entry["id"]].split("/")[:-1]: + api_entry["default-proto-package"] = default_versions_extended[api_entry["id"]].replace("/", ".") + else: + api_entry["default-proto-package"] = default_versions[api_entry["id"]].replace("/", ".") + api_entry["reference-doc-includes"] = reference_doc_includes[api_entry["id"]] + apis["apis"].append(api_entry) + + with open(api_json, "w") as apis_json_file: + json.dump(apis, apis_json_file, indent=4, sort_keys=True) + apis_json_file.write("\n") + + + +def get_all_api_dirs(googleapis_dir: Path = GOOGLEAPIS_DIR) -> List[Path]: + """ + Walks through all API directories in the specified `googleapis_dir` path with + a correspnding BUILD.bazel file. + + Args: + googleapis_dir(pathlib.Path): Path to the directory which contains a BUILD.bazel file. + + Returns: + List[pathlib.Path] where each entry corresponds to a directory which contains a + BUILD.bazel filewithin the specified `googleapis_dir`. + """ + if not Path(googleapis_dir).exists(): + raise FileNotFoundError(f"Directory {googleapis_dir} not found") + return [obj.parents[0].resolve() for obj in googleapis_dir.rglob("**/BUILD.bazel")] + + +if __name__ == "__main__": + api_dirs = get_all_api_dirs() + configure_apis_json(api_dirs) diff --git a/scripts/configure_pipeline_state/configure_pipeline_state.py b/scripts/configure_pipeline_state/configure_pipeline_state.py new file mode 100644 index 000000000000..43ab0516b0ce --- /dev/null +++ b/scripts/configure_pipeline_state/configure_pipeline_state.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import json +from pathlib import Path +from typing import List + +SCRIPT_DIR = Path(__file__).resolve().parent +ROOT_DIR = Path(SCRIPT_DIR / ".." / "..").resolve() +PACKAGES_DIR = ROOT_DIR / "packages" +GENERATOR_INPUT_DIR = ROOT_DIR / "generator-input" +RELEASE_PLEASE_MANIFEST_JSON = ROOT_DIR / ".release-please-manifest.json" +GAPIC_METADATA_JSON = "gapic_metadata.json" + +def configure_pipeline_state( + package_dirs: List[Path] +) -> None: + """ + This method updates the `pipeline-state.json` file in the directory + `generator-input`. + + Args: + package_dirs(List[pathlib.Path]): A list of Paths, one for each package in the + `packages/` folder whose entry will be updated in the `pipeline-state.json`. + + Returns: + None + """ + + pipeline_state = {} + with open(RELEASE_PLEASE_MANIFEST_JSON, "r") as release_please_manifest_json_file: + release_please_manifest = json.load(release_please_manifest_json_file) + pipeline_state["commonLibrarySourcePaths"] = [] + # We don't want to generate these APIs for historic reasons (Come back to this list if needed) + pipeline_state["ignoredApiPaths"] = [ + "google/cloud/bigquery/storage/v1alpha", + "google/cloud/bigquery/storage/v1beta", + "google/cloud/confidentialcomputing/v1alpha1", + ] + pipeline_state["imageTag"] = "latest" + pipeline_state["libraries"] = [] + for package_dir in package_dirs: + api_paths = [] + for individual_metadata_file in package_dir.rglob(f"**/{GAPIC_METADATA_JSON}"): + with open(individual_metadata_file, "r") as gapic_metadata_json_file: + gapic_metadata = json.load(gapic_metadata_json_file) + api_paths.append(gapic_metadata["protoPackage"].replace(".", "/")) + pipeline_state["libraries"].append({ + "id" : package_dir.name, + "currentVersion": release_please_manifest[f"packages/{package_dir.name}"], + "generationAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "releaseAutomationLevel": "AUTOMATION_LEVEL_AUTOMATIC", + "lastGeneratedCommit": "97a83d76a09a7f6dcab43675c87bdfeb5bcf1cb5", + "apiPaths": api_paths, + "sourcePaths": [f"packages/{package_dir.name}"] + }) + + with open(GENERATOR_INPUT_DIR / "pipeline-state.json", "w") as f: + json.dump(pipeline_state, f, indent=4) + f.write("\n") + + +def get_all_packages(packages_dir: Path = PACKAGES_DIR) -> List[Path]: + """ + Walks through all API packages in the specified `packages_dir` path. + + Args: + packages_dir(pathlib.Path): Path to the directory which contains packages. + + Returns: + List[pathlib.Path] where each entry corresponds to a package within the + specified `packages_dir`. + """ + if not Path(packages_dir).exists(): + raise FileNotFoundError(f"Directory {packages_dir} not found") + return [obj.parents[0].resolve() for obj in packages_dir.rglob("**/.OwlBot.yaml")] + +if __name__ == "__main__": + package_dirs = get_all_packages() + configure_pipeline_state(package_dirs) diff --git a/tools/python_generator_cli/cli.py b/tools/python_generator_cli/cli.py new file mode 100644 index 000000000000..2c608e4f8b34 --- /dev/null +++ b/tools/python_generator_cli/cli.py @@ -0,0 +1,454 @@ +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import click +import glob +import json +from pathlib import Path +import os +import re +import shlex +import shutil +import subprocess +import sys +import tempfile +import yaml + +from typing import Iterable, Optional, Union + +PathOrStr = Union[str, Path] +ListOfPathsOrStrs = Iterable[Union[str, Path]] + +@click.group() +def main(): + pass + + +@main.command() +@click.option( + "--api-path", + required=True, + type=str, + help=""" + Path within the API root (e.g. googleapis) to the API to + generate/build/configure etc. For example, for a major-versioned + API directory: google/cloud/functions/v2. + """, +) +@click.option( + "--output", + required=True, + type=str, + help=""" + The location where generated files will be created. + """, +) +@click.option( + "--api-root", + type=str, + help=""" + The path to which the api definition (proto and service yaml) and its + dependencies reside. + """, +) +def generate_raw(api_path: str, output: str, api_root: str): + """Generates a python client library using the given arguments.""" + with tempfile.TemporaryDirectory() as tmp_dir: + generator_command = f"protoc {api_path}/*.proto --python_gapic_out={tmp_dir}" + subprocess.run([generator_command], cwd=api_root, shell=True) + subprocess.run( + f"isort --fss docs google tests noxfile.py setup.py", + cwd=tmp_dir, + shell=True, + ) + subprocess.run( + f"black docs google tests noxfile.py setup.py", cwd=tmp_dir, shell=True + ) + subprocess.run(f"cp -r {tmp_dir}/. {output}", cwd=output, shell=True) + + +@main.command() +@click.option( + "--repo-root", + required=True, + type=str, + help=""" + Path to the root of the clone of the git repository. + """, +) +@click.option( + "--library-id", + required=True, + type=str, + help=""" + The name of the package to build. + """, +) +def build_library(repo_root: str, library_id: str): + """This is unused at the moment""" + pass + +@main.command() +@click.option( + "--api-root", + required=True, + type=str, + help=""" + Path to a clone of `googleapis/googleapis`. + """, +) +@click.option( + "--generator-input", + required=True, + type=str, + help=""" + Path within the directory which contains files necessary for client + library generation. + """, +) +@click.option( + "--output", + required=True, + type=str, + help=""" + The location where generated files will be created. + """, +) +@click.option( + "--library-id", + required=True, + type=str, + help=""" + The name of the library to generate. + """, +) +def generate_library(api_root: str, generator_input: str, output: str, library_id: str): + """Generates a python client library using the given arguments.""" + + with open( + f"{generator_input}/pipeline-state.json", "r" + ) as pipeline_state_json_file: + pipeline_state = json.load(pipeline_state_json_file) + with open(f"{generator_input}/apis.json", "r") as apis_json_file: + all_apis_config = json.load(apis_json_file) + library_specific_config = next( + item for item in pipeline_state["libraries"] if item["id"] == library_id + ) + for api_path in library_specific_config["apiPaths"]: + api_specific_config = next( + item + for item in all_apis_config["apis"] + if item["apiPath"] == api_path + ) + + config_keys = [ + "api-description", + "autogen-snippets", + "default-proto-package", + "documentation-name", + "documentation-uri", + "gapic-version", + "python-gapic-namespace", + "python-gapic-name", + "reference-doc-includes", + "release-level", + "rest-numeric-enums", + "retry-config", + "service-yaml", + "title", + "transport", + "warehouse-package-name", + ] + generator_options = [] + for key in config_keys: + config_value = api_specific_config.get(key, None) + if config_value is not None: + # There is logic in the generator that treats all values of + # `rest-numeric-enums` as True, so just omit it if we want it to be False + if key == 'rest-numeric-enums' and config_value == "False": + continue + elif key == "api-description" or key == "title": + formatted_config_value = shlex.quote(config_value.replace(",", "|")) + generator_options.append(f"{key}={formatted_config_value},") + elif key == "service-yaml" or key == "retry-config": + generator_options.append( + f"{key}={api_path}/{config_value}," + ) + else: + generator_options.append(f"{key}={config_value},") + + with tempfile.TemporaryDirectory() as tmp_dir: + generator_command = ( + f"protoc {api_path}/*.proto --python_gapic_out={tmp_dir}" + ) + if len(generator_options): + generator_command += ( + f" --python_gapic_opt=metadata," + ) + for generator_option in generator_options: + generator_command += generator_option + print(generator_command) + subprocess.run([generator_command], cwd=api_root, shell=True) + subprocess.run( + f"isort -q --fss docs google tests noxfile.py setup.py", + cwd=tmp_dir, + shell=True, + ) + subprocess.run( + f"black -q docs google tests noxfile.py setup.py", + cwd=tmp_dir, + shell=True, + ) + subprocess.run(f"mkdir -p packages/{library_id}", cwd=output, shell=True) + subprocess.run( + f"cp -r {tmp_dir}/. packages/{library_id}", cwd=output, shell=True + ) + os.chdir(output) + apply_client_specific_post_processing( + f"/generator-input/client-post-processing", library_id + ) + +@main.command() +@click.option( + "--repo-root", + required=True, + type=str, + help=""" + Path to the root of the clone of the git repository. + """, +) +@click.option( + "--library-id", + required=True, + type=str, + help=""" + The name of the package to clean. + """, +) +def clean(repo_root: str, library_id: str): + """Deletes all automatically generated files for a given library-id.""" + + files_to_preserve = [ + # TODO: remove all owlbot configs in a separate PR + ".OwlBot.yaml", + # TODO: auto-generate .repo-metadata.json from service config (apis.json to supplement missing information) + ".repo-metadata.json", + "CHANGELOG.md", + "tests/system/__init__.py", + "tests/system/smoke_test.py", + ] + # TODO: remove all *.tar.gz files in a separate PR + files_to_preserve.extend([os.path.basename(tar_path) for tar_path in glob.glob(f"{repo_root}/packages/{library_id}/*.tar.gz")]) + + with tempfile.TemporaryDirectory() as tmp_dir: + os.makedirs(f"{tmp_dir}/tests/system") + for file in files_to_preserve: + if Path(f"{repo_root}/packages/{library_id}/{file}").exists(): + shutil.copy(f"{repo_root}/packages/{library_id}/{file}", f"{tmp_dir}/{file}") + shutil.rmtree(f"{repo_root}/packages/{library_id}") + + os.makedirs(f"{repo_root}/packages/{library_id}/docs") + os.makedirs(f"{repo_root}/packages/{library_id}/tests/system") + + for file in files_to_preserve: + if Path(f"{tmp_dir}/{file}").exists(): + shutil.copy(f"{tmp_dir}/{file}", f"{repo_root}/packages/{library_id}/{file}") + create_symlink_in_docs_dir(f"{repo_root}/packages/{library_id}", "CHANGELOG.md") + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/6318601ed44bb99ec965bae0d46b54eba42aeb24/synthtool/languages/python_mono_repo.py#L147-L210 +def apply_client_specific_post_processing( + post_processing_dir: str, package_name: str +) -> None: + """Applies client-specific post processing which exists in the Path `post_processing_dir`. + This function is only called from `owlbot_main` when there is an `owl-bot-staging` folder + which contains generated client library code. Re-running the script more than once is + expected to be idempotent. The client-specific post processing YAML is in the following format: + ``` + description: Verbose description about the need for the workaround. + url: URL of the issue in gapic-generator-python tracking eventual removal of the workaround + replacements: + - replacement: + paths: [] + before: "The string to search for in the specified paths" + after: "The string to replace in the the specified paths", + count: + ``` + + Note: The `paths` key above must only include paths for the same package so that the number of replacements + made in a given package can be verified. + + Args: + post_processing_dir (str): Path to the directory which contains YAML files which will + be used to apply client-specific post processing, e.g. 'packages//scripts/client-post-processing' + relative to the monorepo root directory. + package_name (str): The name of the package where client specific post processing will be applied. + """ + + if Path(post_processing_dir).exists(): + for post_processing_path in Path(post_processing_dir).iterdir(): + with open(post_processing_path, "r") as post_processing_path_file: + post_processing_json = yaml.safe_load(post_processing_path_file) + all_replacements = post_processing_json["replacements"] + # For each workaround related to the specified issue + for replacement in all_replacements: + replacement_count = 0 + number_of_paths_with_replacements = 0 + # For each file that needs the workaround applied + for client_library_path in replacement["paths"]: + if f"{package_name}/" in client_library_path: + number_of_paths_with_replacements += 1 + replacement_count += replace( + client_library_path, + replacement["before"], + replacement["after"], + ) + # Ensure idempotency by checking that subsequent calls won't + # trigger additional replacements within the same path + assert ( + replace( + client_library_path, + replacement["before"], + replacement["after"], + ) + == 0 + ) + if number_of_paths_with_replacements: + # Ensure that the numner of paths where a replacement occurred matches the number of paths. + assert number_of_paths_with_replacements == len( + replacement["paths"] + ) + # Ensure that the total number of replacements matches the value specified in `count` + # for all paths in `replacement["paths"]` + assert replacement_count == replacement["count"] + + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/master/synthtool/transforms.py#L70-L73 +def _filter_files(paths: Iterable[Path]) -> Iterable[Path]: + """Returns only the paths that are files (no directories).""" + + return (path for path in paths if path.is_file() and os.access(path, os.W_OK)) + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/6318601ed44bb99ec965bae0d46b54eba42aeb24/synthtool/transforms.py#L268-L294 +def replace( + sources: ListOfPathsOrStrs, before: str, after: str, flags: int = re.MULTILINE +) -> int: + """Replaces occurrences of before with after in all the given sources. + + Returns: + The number of times the text was found and replaced across all files. + """ + expr = re.compile(before, flags=flags or 0) + paths = _filter_files(_expand_paths(sources, ".")) + count_replaced = 0 + for path in paths: + replaced = replace_in_file(path, expr, after) + count_replaced += replaced + return count_replaced + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/6318601ed44bb99ec965bae0d46b54eba42aeb24/synthtool/transforms.py#L34C1-L67C14 +def _expand_paths( + paths: ListOfPathsOrStrs, root: Optional[PathOrStr] = None +) -> Iterable[Path]: + """Given a list of globs/paths, expands them into a flat sequence, + expanding globs as necessary.""" + if paths is None: + return [] + + if isinstance(paths, (str, Path)): + paths = [paths] + + if root is None: + root = Path(".") + + # ensure root is a path + root = Path(root) + + # record name of synth script so we don't try to do transforms on it + synth_script_name = sys.argv[0] + + for path in paths: + if isinstance(path, Path): + if path.is_absolute(): + anchor = Path(path.anchor) + remainder = str(path.relative_to(path.anchor)) + yield from anchor.glob(remainder) + else: + yield from root.glob(str(path)) + else: + yield from ( + p + for p in root.glob(path) + if p.absolute() != Path(synth_script_name).absolute() + ) + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/6318601ed44bb99ec965bae0d46b54eba42aeb24/synthtool/transforms.py#L243-L265 +def replace_in_file(path, expr, replacement): + try: + with path.open("r+") as fh: + return _replace_in_file_handle(fh, expr, replacement) + except UnicodeDecodeError: + pass # It's a binary file. Try again with a binary regular expression. + flags = expr.flags & ~re.UNICODE + expr = re.compile(expr.pattern.encode(), flags) + with path.open("rb+") as fh: + return _replace_in_file_handle(fh, expr, replacement.encode()) + + +def _replace_in_file_handle(fh, expr, replacement): + content = fh.read() + content, count = expr.subn(replacement, content) + + # Don't bother writing the file if we didn't change + # anything. + if count: + fh.seek(0) + fh.write(content) + fh.truncate() + return count + +# Copied from synthtool +# https://github.com/googleapis/synthtool/blob/906b162627b29cf10621074a5055bec0e30b5307/synthtool/languages/python_mono_repo.py#L69C1-L92C1 +def create_symlink_in_docs_dir(package_dir: str, filename: str): + """Creates a symlink in the docs directory for pointing to ../ + using the package_dir specified as the base directory. + + Args: + package_dir (str): path to the directory for a specific package. For example + 'packages/google-cloud-video-transcoder' + working_dir (str): the absolute path to the directory where the link should be created + filename (str): the name of the file to link + """ + + current_dir = os.getcwd() + + os.chdir(f"{package_dir}/docs") + + relative_path_to_docs_file = Path(filename) + relative_path_to_file = Path(f"../{filename}") + + if relative_path_to_file.exists(): + if not relative_path_to_docs_file.exists(): + Path(relative_path_to_docs_file).symlink_to(relative_path_to_file) + + os.chdir(current_dir) + + +if __name__ == "__main__": + main()